how the miner start to count the timestamp to insert in the block I have a doubt, how the miner starts to count the timestamp to insert in the block.

An example the timestamp insert inside the genesis block is 1/3/2009, 7:15:05 PM GMT+1. If the genesis block would have been mined the time is the moment to the miner have started to resolve the proof-of-work or is the moment to the miner win the proof-of-work?

The timestamp is set by the miner and is part of the data hashed for the Proof of Work. So it is set at the time the miner begins hashing a particular header and searching for a nonce for it.


unknown output script in a sample bitcoin pcap file I start working on bitcoin protocol to extract output addresses from scripts in tx structures. Now in can produce some valid bitcoin address but some scripts are not familiar in op_code lists introduced in bitcoin wiki(script).

for example, the hex stream value of output script in first tx structure of my sample pcap is like this:

410498361908359fec5adaa624428484e7d117f36f811c7c471f4f1c7dd8184c20b32f0e2590c8d70906ebd585da2ae14ea942e4088891139379b434a26173754750ac

and no op_code is present with 0x41 value.

can anyone explain this matter?

0x01 to 0x4b are the "push" opcodes. That is to say, whichever opcode you use, that many bytes are pushed to stack. This makes your script:

PUSH(0x41) 0498361908359fec5adaa624428484e7d117f36f811c7c471f4f1c7dd8184c20b32f0e2590c8d70906ebd585da2ae14ea942e4088891139379b434a26173754750 ac

0x41 is 65 in decimal, which is the length of an uncompressed public key. The last byte, 0xAC, is the OP_CHECKSIG

In short, this is a Pay-to-pubkey (p2pk) script, which were common in the early days of Bitcoin. Indeed, it leads to 1MeeajrKNiF8WtD24S4DmVwEPQYJxeh7Ef, which contains the coinbase Bitcoin from block 93641

Bitcoin also has a decodescript method which you can use via the RPC or bitcoin-cli to decode these scripts into opcodes and the addresses (if an address exists for that script)


What explanations are there for the bubble of 2013 and subsequent Bitcoin price in 2014? I'm having a look at the price history of Bitcoin/USD, and there's a significant spike around the end of 2013 (to USD 1137), followed by a very volatile year in 2014 that ended with Bitcoin around USD 330.

Is there anyone who's followed Bitcoin since 2013 who can comment on this volatile price action? In particular, I'm interested to know: what caused the dramatic run up to USD ~1140 at the end of 2013, and why has the price come down to current levels?

Many thanks!

BTC is a speculative commodity so bubbles are to be expected, and bubbles are cyclical in nature. The previous bubble went up to about US$250 and took several months to build back up and then inflect to climb exponentially to ~1200. There's not one reason for this, and it happens with other bubbles too. But I'll try my best:

The general explanation is that smart money buys low, generates media attention that induces FOMO (fear of missing out) which attracts buyers, who raise the price to new highs, increasing media coverage ad absurdum, when finally there are not enough suckers to keep the rate up and people panic and start selling. Then there's usually a "dead cat bounce" (you'll see the price jumped back up after the first plunge from the peak) followed by more selling. The smart money sells all the way to the top, and buys all the way to the bottom. Now they have to start the cycle again, so they use their market making power to quiet things down and make it feel safe again, waiting for a new crop of people to come back, buy, see amazing returns, tell their friends and media, and the bubble starts again. We're likely there now.

The China factor One main factor leading up to the ~1200 bubble in particular which made it so much higher was the rapid expansion of BTC speculation in China at the time. That's simply a huge market, and New Chinese exchanges were opening up on an almost weekly basis, with relatively low barriers to investment. You could see them leading the price action at the time, and growing their capitalization at a crazy rate. Exchanges like BTCChina and Huobi etc. overtook MtGox's volume in a matter of weeks if not days.

Post-burst Volatility I'm sure there are plenty of reasons for this, one of which is just the general nature of bubbles as explained above. However there were at least a couple of specific things I can think of that contributed to volatility post the ~1200 bubble: Wall Street, media coverage, and the sorry state of exchanges at the time.

Wall Street around that time started giving quants some money to play in the BTC market. You could literally see the bot action taking over MtGox on the way to the top and then back down again. I'm not saying the bots did it, but they do make more money when price movements are wide, and had enough influence on the price to induce these large moves. For example they would create lots of bids at a certain low price with one hand, and begin selling to apply downward price pressure with the other. People would put their bids just in front of the bid wall, thinking it represents a solid price support (a "bottom" for the move). As selling accelerated, the bid wall started receding lower, so they could keep selling into those suckers' bids. Then the wall was removed completely, creating even more panic selling, until the smart money decided it's time to pump the price back up. This, and the opposite ("pump and dump") were happening on a regular basis and observed live by traders on forums like TradingView.

Media coverage was a giant piece of uninformed hype. The price action drew attention, but the stories were more absurd than the price. When some company said they'd accept BTC the price jumped. Then someone talked about taxing Bitcoin and the price tanked. Most stories were non-news or rumors or actual fake stories planted by smart money, but panicky noob traders would buy and sell on it as if it were news about GE or Microsoft, reported in the WSJ.

Finally, Exchanges were constantly beind DDoSed and manipulated, which made small-time traders panic and sell, and then panic and buy back in when the price jolted back up. Once the largest exchange by volume, MtGox exploded in slow motion, causing many ripples along the way (mostly in the weeks following the ~1200 peak). Exchanges would frequently go illiquid and disappear with your money. Exchanges were so badly run they would constantly make you feel like your orders aren't being processed and induce panic. This adds volatility.

I'm sure there's plenty I'm missing, happy to see more comments/answers!


How to build a Java trade bot So my friend is interested in cryptocurrency and I decided to give him a hand, since he wants to start buying and selling coins for profit. I thought I could accomplish this, so I will point out my plan:

I will look into GDAX, which from what I understand will be better for us since we will be making several low price transactions.
Since GDAX can access Coinbase, I can just use my wallet from there to pull in funds.
Once I have registered on both sites, I will start creating the actual Java application.
I was thinking of using this API: https://github.com/robevansuk/gdax-java Even though it is a bit confusing for me, I think I can figure out how to do these functions: get market data (to figure out when to sell or buy), get account (obviously), deposit and withdraw from Coinbase, place a new order (for trading)

Now I wanted to ask you a few things on this plan.

1) Do you know of any examples of implementations of this API: https://github.com/robevansuk/gdax-java

2) I am using GDAX for the purpose of security and lower fees, but will withdrawing and depositing for Coinbase cost a fee?

3) I am probably a little blinded, due to my lack of knowledge in the subject. Before I get in this, could you point me into the best way of approaching this plan?

So you want to limit your bot strictly to gdax? There are some libs providing abstraction layers from a specific exchange. One example is

https://github.com/timmolter/XChange

This becomes very helpful once you want to make trades on more than 1 exchange.


Is there a gui to manage the bitcoind server via a browser? I installed bitcoind on my centos server and was wondering if there was a gui that can control everything the bitcoind does. Would be nice check balance, send funds, create wallets via the browser.

Looks, like it is 50 strings php file:

https://en.bitcoin.it/wiki/PHP_developer_intro

See, https://bitcoin.stackexchange.com/questions/13849/how-do-we-talk-to-bitcoind-in-a-php-plugin

Also, read this http://www.reddit.com/r/Bitcoin/comments/1tvn12/best_way_to_programatically_receive_and_send/

For the rest, https://en.bitcoin.it/wiki/Bitcoin-python


How can I generate wallet files for multibit or armory? I'm considering working on a bitcoin project that will need to generate wallet files.  I'm not looking to create receipt addresses that a customer can send funds to for an existing wallet.  Instead, I need to generate numerous wallet files, each with preferably only 1 payment address, that can be distributed across multiple locations.

Can this easily be done from a daemon command or with an existing API?  If there is an API for this, any language is fine, though I would prefer Python.

For MultiBit you could use the command line utility called WalletTool that Mike Hearn wrote. You can use it to create bitcoinj wallets (which is what MultiBit uses).
There is a description of it here:
https://bitcointalk.org/index.php?topic=43616.msg1451177#msg1451177

You could wrap calls to it in your favourite scripting tool fairly easily I imagine.


Can I mine bitcoin testnet coins with my regular bitcoin asic miner? Is it possible to use my bitcoin asic miner to mine testnet bitcoin coins? Is there special software I need? can I join a testnet pool or is there even such a thing?

Yes, this should works since they both use the same algotherm but just a different network.


Where can I get historic data series of Bitcoin prices? Where can I get a time series of (date, bitcoin price in USD)? BitcoinCharts no longer provide historic data, only the last 20,000 samples.

EDIT: These links appear to no longer work

You can get it at Bitcoincharts:

http://bitcoincharts.com/t/trades.csv?symbol=SYMBOL[&start=UNIXTIME][&end=UNIXTIME]

It returns a CSV file with the format:unixtime,price,amount.

For example, you can use this link to get the MtGox prices since August:

http://bitcoincharts.com/t/trades.csv?symbol=mtgoxUSD&start=1312174800


Security of ChaChaPoly (IETF rfc7539) in the noise protocol framework of the Lightning Network According to this paper ChaChaPoly is secure against chosen known plaintext attacks. I wonder however if that security assumption is weakened by a lot since messages sent on the transport layer of the lightning network start with a 16 bit length field with an HMAC coming from ChaChaPoly. (They are then followed by the actual lightning message, followed by an HMAC for the payload which I don't care about at this time)

As there is only a small fixed set of potential lengths of lightning messages, we can guess the plaintext of the length field. In particular, I wonder what is the impact of doing a block cipher like ChaChaPoly as defined here

on 16 bit data for which the plaintext is potentially known?

As mentioned before, I am not an expert on cryptography but I am not sure if this particular setup does not yield a compromise of security of the Transport layer, potentially exposing session keys which would allow an attacker to decrypt up to 500 messages or even spoof data. Has anyone ever looked into this or can give me a reason why our setup does not yield a security problem?

The paper you cited proves that ChaChaPoly is IND-CCA secure. This notion of security seems to perfectly cover your attack if I read the definition right  (https://en.wikipedia.org/wiki/Ciphertext_indistinguishability):
"A cryptosystem is considered secure in terms of indistinguishability if no adversary, given an encryption of a message randomly chosen from a two-element message space determined by the adversary, can identify the message choice with probability significantly better than that of random guessing (1⁄2).".

That is, even if just two such lengths existed, the adversary cannot guess which one is encrypted here significantly better than randomly.


Please help with my unconfirmed transaction (for two days already) Could someone pleas help me with this trancaction,highly appreciated :).

Link underneath

The only thing you can do is either wait or fee bump the transaction by using the replace by fee functionality to increase the transaction fee.

https://en.bitcoin.it/wiki/Fee_bumping

Unfortunately the bitcoin network in being spammed with transaction by crooks operating competing cryptocurrencies the mempool has a backlog at the moment


Why was the Schnorr code removed from Bitcoin Core? I was looking for the Schnorr implementation in Bitcoin Core and was surprised to see that it was removed on Nov 2016 (commit e06e878fd7dcc99825025fa99aedb86bc7d5c29f). Why was the source code completely removed from Bitcoin Core? Was it moved to some other development repo?

The Schnorr implementation was never in Bitcoin Core. Rather it is in the libsecp256k1 library that is a subtree in Bitcoin Core. The commit you reference is actually a commit in that library which appears in Core's commit history because the subtree in Core is periodically updated with the libsecp256k1 upstream source code.
The reason for removal is explained in the pull request that removed it:

This module implemented a naive custom Schnorr signature scheme, though several flaws have been discovered with its approach since (lack of commitment to public keys, ability for 3rd parties to adapt signatures to related keys, and a multisigning API that is vulnerable to cancellation attacks, restart attacks that leak a private key to cosigners).
I have been working on a better scheme, but I don't believe this should be upstream until it's been vetted in more thorough ways. People assumed that it being included in the repository was a sign that it was final, so I'm removing it to avoid any confusion.


Opening wallet.dat in python, using bsddb3 I'm trying to open wallet.dat using the bsddb3 module for Python 2.7.

db = bsddb3.btopen("wallet.dat", "r")

contents of db:

{'main': '\x00\x00\x00\x02'}

I have to Which is almost nothing.

ls -l wallet.dat -> 72K

I though I could view information about the wallet, is there problem with the version of bsddb or this line of code?

open the database like this:

from bsddb.db import *

db = DB()
r= db.open("wallet.dat", "main", DB_BTREE, DB_RDONLY)

print "%s" % (db.items())


Can anyone give me some help editing the Abe html? I've got Abe running, but would really like to get the page looking nicer. I've managed to change the logo, but would like to change the title and change some colours and fonts, maybe add some more text.

I know this HTML is generated on the fly, from abe.py? I've tried editing that, but it doesn't seem to effect my page at all.

I use CSS only.

Try this: Use default Abe html layout and use the following modified abe.css. The only changes needed are logo margins and color/font palette. Name your logo the same as abe's (logo32.png - makes things easier)

Click here for the modified abe.css

I modified the previous abe.py but found with the current version I'm using (0.8pre) that css is much easier. Most objects on the page can be manipulated.


What is the easiest to operate/fastest solo bitcoin mining client for a cluster rig? I'm planning to set up a rig and need a solo mining client. Can you offer me some suggestions? (Please don't just tell me that solo mining isn't worth it).

If you have a GPU rig cluster, you ought to look at standard miners. This question should help you get started:

What open source miner applications are there?

In the end you ought to try a few of them out and see which ones give you the best performance on your hardware. You can also have a look at Mining hardware comparison Wiki page to see what performance you should expect from your hardware and what configuration was used to accomplish it.


How can I explain the meaning of Bitcoin to my grandma? I wrote a book about Bitcoin, and my proud grandma wanted to have a copy. So she got it, said "What a beautiful picture on the cover!" and - "What is this, Bitcoin?".

She doesn't know crypto-currencies, never used a computer. But she uses a PayPal account from her iPhone. How can I explain what makes Bitcoin special to a non-technical person? I don't mean introducing in using, and the existing question "What is Bitcoin?" with its answers is still much too technical.

Such challenges are not rare. I need to explain to my boss why I request some days off to go to a Bitcoin conference, and soon my daughter will want to know why daddy is so excited about his mining rig. My girlfriend needs to understand why I spend so much time researching Bitcoin.

Does anyone know eye-opening words? Perhaps an analogy or a metaphor would help? So grandma, girlfriend, daughter, boss - all may roughly understand and say "Ah, such a thing? Useful indeed!"

The one I use, at least for adults, is to make an analogy to a bank. When you write a check for some amount of money to another person and that person deposits the check, the bank does not physically take the amount of money and put it from your bin to another, they use a ledger to keep track of who has how much and they make sure the books balance. Bitcoin is essentially the same type of money in that there's a central ledger, but instead of only the bank having access to it, everyone has access to it. And much like signing over a check with your signature, you sign bitcoin transactions digitally.

As far as mining, the analogy there is that once a month or so, you get a bank statement that tells you your new balance along with all the transactions that happened on your account. If, for example, you overdrafted on your account, they'll tell you exactly what that cost and put fees on and so forth. As an aside, with bitcoin, you can't have a negative balance, so overdrafted transactions just simply don't go through. In any case, bitcoin creates a statement of not just your transactions, but everyone's transactions about every 10 minutes.

Usually, that's enough for people to understand what's going on. I avoid stuff like proof-of-work, mining reward, fixed money supply unless they're perceptive enough to ask those questions.


Where do these coins gain their value? I have been mining coins for a long time (started with BTC/LTC years ago, moved to altcoins recently) and have realized I am not clear on the actual source of the value.

Do the exchanges deem the value of these coins? With all of these new alt-coins, do they not actually have a BTC/USD value unless they are added to an exchange?

How do buy/sell orders affect the coin price? If someone bought X amount of , that would cause the value to increase correct? Wouldn't they then just be able to turn around and resell what they just bought plus any they already had for a higher value?

This is really asking about basic trading economics: if I have some new product X, what price does it have? I can set a price and see if anyone buys it. If not, I might lower the price or auction it to see what someone might pay for it. That is the starting value, but it doesn't really mean much as it hasn't been field-tested (so to speak). If others think it is worth more, they will buy more; if others think it is worth less, they will not buy at the current price, so those trying to sell will lower their prices until they can agree on a price.

What you describe is a simple pump and dump operation, which could be done on any sort of traded commodity like stocks or cryptocurrencies (especially altcoins). If you can feign interest in something (in this case, an altcoin) so that the trade price goes up, then you might be able to turn a profit. Note, however, that this is a sort of fraud and can open you up to, at minimum, civil lawsuits.

Doing a "pump and dump" will be easier on small markets, like altcoins, than on larger markets, like Bitcoin and Litecoin, because you have to buy up enough of the coin to start an upward trend that people will notice and buy into. If the market is large, you'd need huge resources in order to make an impact in the market.


relationship between bitcoin miner and verification of transactions Bitcoin miner mines a block, which can't be submitted to the network without proof of work. And the new block contains all of the new transactions. Hence the new block acts as a security measure, and authority.

My puzzle is following:
In the scenario I just described, the miner of the new block, in some sense, authorized the new transactions to be true. Yet the miner has never looked into the new transaction he just authorized.

This somehow relates to orphaned blocks, and longest chain(?)

Links I found useful to help me understand:

How do nodes verify Bitcoin Transactions?
http://timothyblee.com/2011/04/19/bitcoins-collusion-problem/
http://spectrum.ieee.org/img/06Bitcoin-1338412974774.jpg
Why is blockchain necessary?
Which is the relation between transactions and blocks?

A miner can either verify transactions itself or assume that a transaction is valid as some nodes let him know they verified it.

In either case, the miner can enter the transaction in the block he is working on. Note that in pool mining the pool decides what transactions are included, while in solo mining your own bitcoind client does so.

An important thing to know is that miners only try to make a successor block for a block they think is valid. This means that when a miner generates a block with an invalid transaction on top of a valid block, other miners will not accept the new block. They will ignore it and continue trying to build a block on top of the last block they think is valid.

This way of working results a situation in which accepting invalid transactions and broadcasting invalid blocks is a waste of resources because your blocks will be orphaned and you will have to start all over.


Possible to do recurring payments with Bitcoin? I'm a developer and using the Coinbase Ruby API to attempt to build a Coinbase application.  I'm still coming to grips with how it all works.  My question is, is it possible to set up recurring payments with Bitcoin?  If so, how does that work?

I would prefer not to lean on a solution where I'm waiting for the customer to submit a payment every month, but for regular one-time payments, it was mentioned to me on this forum that the only way to accept them is to give the customer an address and hope they submit a payment.

No, you cannot do that. In Bitcoin, everything relies on the payer to perform the transaction, not the receiver. You as the receiver cannot do anything to make the payer give you money unlike with fiat payment processors.

However if all of your customers are using a centralized service like Coinbase, you can create software which uses Coinbase's API and essentially gives you permission to move that person's coins. This allows you to make the transactions to pay you but it also requires the user to trust you to not steal their money. There should be a permissioning system that makes this setup more trustworthy and less dangerous for the users.


How can I recover BTC sent to BCC wallet from Bitcoin Core Wallet? I sent BTC from my Core Wallet to my BCC Wallet on my phone.  The BCC wallet still shows a 0 balance.  How can I recover it?

You can not unless you also have the same BTC address as BCC address.
Basically you need the private key for the address you sent it to.
So let's say your BTC address is A, and you sent it to BCC address B.
You now need to have the private key of B on the BTC network, and you need to import it into Core.
Look up the private key of your BCC address B, and see if you can import it t into Core. I don't think it will work, but i have never tried that.


yesterday evening I send out 0.97 BTC. I checked transaction and It says : " lock time 459355" are my coins lost ? please help

It says Lock Time: 459355

and still unconfirmed since yesterday

No, your coins are not lost. Either they get confirmed and become available to the recipient, or they are unspent and remain yours.

All transactions created with Bitcoin Core (and maybe also other wallets) set their transaction to be confirmed only with the next block at the earliest. This is done to discourage fee-sniping.

In your case I assume that the current block was 459354, so the transaction was created locked to the next block 459355. Since we're currently at block 459475, the delay of confirmation for your transaction would not be related to the locktime.

For more information please see Why is my transaction not getting confirmed and what can I do about it?.


Is there a list of core Bitcoin committers? Where can I find a list of people that can commit directly to the github project?

Here is a list of people who have had commit access to Bitcoin Core. This list can also be found on Bitcointalk and on Reddit (it's the same list just in two different places). All lists are kept up to date and in sync.
This list contains the names and usernames of everyone who I can find evidence for ever having commit access to Bitcoin Core, the dates during which they had commit access, sources for all of this information, and reasoning for the access. Those who currently have commit access are in bold.

Satoshi Nakamoto (satoshi, s_nakamoto): 1/3/09 - 9/13/11^[1] Creator, first Lead Maintainer
Martii Malmi (Sirius, sirius_m): 8/30/09 - 9/13/11^[1][2]    Creator of first SVN repo
Laszlo (laszloh) 8/4/10 - 9/13/11^[1]    Original OSX Builds and support
Gavin Andresen (gavinandresen): 10/11/10 - 5/2/16^[3]    Frequent contributor; later Lead Maintainer
Chris Moore (dooglus): 1/21/11 - 3/31/11    Frequent contributor for some time; Still contributes occasionally
Pieter Wuille (sipa): 5/1/11 - present    Frequent contributor
Jeff Garzik (jgarzik): 5/6/11 - July/Aug 2016^[4]   Frequent Contributor
Wladimir J, van der Laan (laanwj, wumpus): 6/5/11 - present^[5]    Frequent contributor; later Lead Maintainer
Nils Schneider (tcatm): 9/19/11 - 5/31/12    Frequent contributor for some time
Greg Maxwell (gmaxwell): 2/11/12 - 12/17/15    Frequent contributor; Gave up commit access due to toxicity and drama from the community
Jonas Schnelli (jonasschnelli): 11/13/15 - present^[6]    Frequent contributor; given access after becoming GUI Maintainer
Marco Falke (MarcoFalke): 4/13/16 - present^[7]    Frequent Contributor; given access after becoming QA/Testing Maintainer
Samuel Dobson (MeshCollider): 12/6/18 - present^[8]    Frequent Contributor: given access after volunteering to be the Wallet Maintainer
Michael Ford (fanquake): 6/8/19 - present^[9]    Frequent Contributor; given access after being nominated by several other frequent contributors and maintainers to become a maintainer.

Footnotes:

[1] The move to Github occurred before the last SourceForge commit, but the last SourceForge commit declares sourceforge as dead. Presumably those who only committed to SourceForge no longer had commit access after the move
[2] Sirius was the one who created the original SVN repo on SourceForge.
[3] gavinandresen was the Lead Maintainer from 2/23/11 until 4/7/14
[4] I was informed via IRC PM by some of the Core devs that jgarzik was removed around August 2016 after he had been inactive for several months.
[5] laanwj is the current Lead Maintainer. After participating in that role for a long time, he was officially given the position by gavinandresen on 4/7/14
[6] jonasschnelli is currently the GUI Maintainer. After participating in that role for a long time, he was officially given the position by laanwj on 11/13/15
[7] MarcoFalke is currently the QA/Testing Maintainer. After participating in that role for a long time, he was officially given the position by laanwj on 4/13/16
[8] MeshCollider is currently the Wallet Maintainer. He had been contributing for a while, particularly to wallet related things. When laanwj asked if anyone would like to be the role of Wallet Maintainer, MeshCollider volunteered.
[9] fanquake is currently the Build System Maintainer as well as a general maintainer. He had been contributing for a while, particularly with updating dependency versions and build system related things. He also had been doing a lot of janitorial things in the repo such as tagging issues, closing old issues and PRs, nominating things to be merged, etc. At the CoreDev event in Amsterdam which several maintainers and contributors attended, he was nominated to be a maintainer by the entire group.

Other Notes:

Dates are Month/Day/year
There may be people missing and dates may be slightly incorrect. These are all that I can determine by looking at old emails and the commit history. Please let me know if anything is incorrect
The start date is determined by the first merge commit made by that person. The end date is determined by the date of the last merge commit made by that person or other announcements of commit access revocation.

After scrolling through nearly the entire git merges history, I have found a couple of interesting things.
Satoshi did not use a Version Control System originally. The releases and source code were originally in a rar file that was uploaded to bitcoin.org. Sirius had to setup the original SVN repository on SourceForge for him. This was then later migrated to GitHub by gavinandresen. Originally patches were authored by developers and then emailed to Satoshi, Sirius, or gavinandresen who then committed the changes to the source tree with the commit message containing the attribution, but not the actual commit itself.
Another interesting fact is that the giving out of commit access has become more strict. It is now a privilege held by those given maintainer positions and those whose privilege was grandfathered in (i.e. they had it previously and kept it). Previously it was simply given out to those who contributed frequently and revoked after they stopped contributing. This appears to be no longer the case, although there are still multiple people who can commit to the repository so that there is not any reliance on one person. The maintainers are still given to frequent contributors as the maintainers are frequent contributors to the set of functionality for which they are maintainers of. They received the positions because of frequent contributions to those functionalities.
Lastly, I could not find any evidence for Satoshi ever publicly announcing that gavinandresen was to be the Lead Maintainer after him. It seems that Gavin was already a frequent contributor and already had commit access for a while before Satoshi disappeared. After Satoshi disappeared and Sirius stopped contributing as much, gavinandresen simply took over the role as lead maintainer as he was the only frequent contributor with commit access.


How do I use mSIGNA without the standard Bitcoin client? Which IP do I have to fill in in mSIGNA to connect to the Bitcoin Network without using the BitcoinQt/bitcoind application?

Is it possible to use mSIGNA and BitcoinQt even if the syncing process is not finished yet?

Yes there is a way, you need a way to connect to someone running BitcoinQT and who has made their node public. BitcoinQT runs as a node, but to make it discoverable to any but other BitcoinQT wallet users you have to go a step further.

So you need a list of such BitcoinQT "servers", and I found one earlier and in searching for that list of open Bitcoin-QT "servers" someone had published I found this.

If I manage to find it again, I am trying to solve my problem with sending from mSIGNA, I will post a link and more complete answer here.


Dumpprivkey or dumpwallet won't show my private key for the address in my wallet Haven't opened my wallet in a while so it's not in sync with the network. 5400 blocks remaining as I write. The wallet is not encrypted.

Received some bitcoins to my address in this wallet. Now I want to get the private key of the address and import it to my wallet on blockchain.info

The output of pywallet's dumpwallet command shows a lot of address/private key pairs but none of them are the address I see on my address book which I received the bitcoins to.

Launched BitcoinQT's debug window, tried the dumpprivkey command. Result: Private key for address is not known (code -4)

Thank you.

The problem was not a technical problem. More like stupidity.

The address I received the bitcoins to is not one of the addresses in the address book. The address book is like your contacts on your phone. Your actual addresses are under the receive coins tab.

So I saved someone else's address to my address book for whatever reason. Then I was trying to extract the private key of that address from my wallet which of course I could not.


How can I set the transaction fee when creating a transaction through Bitcoin-cli commands? I want to run the following command via bitcoin-cli:

./bitcoin-cli sendfrom "10302c02147e2948cbejd9a2bd80d9691ef08a6a4d416c2bb602143a4anj06b90e" "32cjBTQkfLBp38ixj7hdjk0cc90VPPnwhQ" 3.04384215

(Note the account and address to above are not real, as I edited the info)

What I want to understand is, how do I add the fee to the transaction? On the API calls list, I found the command settxfee and amount

But where do I put this in the command? Also, the option of GUI and other wallets or sort is not an option. I have to run this via command line.

And bonus question: Where can I find out what the fee should be to clear within one block?

settxfee sets the fee/kb for future API calls like sendfrom.  It is remains in effect as long as the program runs.

estimatefee 1 returns the fee estimated to result in confirmation within 1 block.


Is there time-to-failure data available for any of the BFL products? Butterfly Labs (BFL) is offering a few mining products which look to be based on some sort of FPGA or ASIC but I can't find any reliable data on what parts they're using or their manufacturing techniques. I'd like to factor device cost into the profitability of mining with these low-power devices but without any MTBF/MTTF/FIT data I can't make a reasonable estimate of how long an average BFL single can be expected to survive.

Does anyone have access to time-to-failure data for BFL's products, or perhaps know what components they're using so that I might find time-to-failure data on the components? Is there any way short of serious testing or published data to determine what a reasonable lifespan should be?

It has now been confirmed by ngzhang that BFL is using Altera Stratix III EP3SL150 FPGAs in their singles. Since Altera has made product reliability data available, we now at least have the appropriate info available for the chips themselves.

The EP3SL150 testing gives it a FIT rating of 15.1 which corresponds to roughly one failure per 66,226,166 hours or ~7,555 years. I don't think we need to worry about the FPGA being the point of failure.

That said, we have precisely zero data about the other parts or failure rates thereof nor do we know how often BFL messes up on their soldering, power supplies or any of the other links in the chain that could contribute to the overall failure rate of the BFL single. I did, however, email BFL and recently received this email from Nasser G at BFL:

  Dear David,

  No Failure data is available. So far, none of our units have failed,
  and all units go under strict quality control measures before they are
  shipped. We've had like 4 or 5 PSU failures among all the units that
  we've shipped.

Of course this is from BFL's mouth so whether it's entirely true or just marketing I can't say with certainty. Lacking data on the overall number of units sold or how long those units have been running (though we could estimate that as 24/7 since they've arrived if we had the other data) it's very difficult to estimate failure data based on BFL's comments, even if we assume them to be completely accurate.


Can unspent outputs only get smaller? It seems that when transactions occur the outputs only get smaller and are never aggregated. There is no apparent way to combine multiple outputs into a single output. The problem I see with this is that eventually all bitcoin outputs will be so divided that it will become impractical to trade them.

For example, imagine a miner receiving thousands of small "fees" of a few dollars each. If the fee keeps growing, it could make it a money losing proposition for a miner to use a fee output that they received previously. The fee is currently around $17 for a simple transaction, so basically what that means is that any output of less than about 0.001 bitcoins is essentially worthless.

Does this foreshadow the death of bitcoin when all the outputs are eventually divided into impractically small amounts?

A transaction can spend from multiple unspent outputs and create fewer outputs than were consumed. So it is is possible to aggregate UTXOs.


Does it make sense to use BitCoin to transfer money to yourself internationally? If you have a bank account in the US and an account in the UK, and you want to move money from one to the other, is Bitcoin a sensible way to do it, or are you better off using TransferWise or just doing an international wire transfer?

While in the US last year, I sent money to myself in Europe that way once, because it was significantly cheaper than using the legacy banking system.

I think it mostly comes down to whether you have easy access to a Bitcoin exchange from your bank account in the US and what amounts you are trying to transfer. It also depends on how urgently you need the money in the other country, and which country you currently are residing in.

Alternative 1 (if in UK): Use your US credit card to get Pounds from the bank, deposit those in your UK bank.
Advantage: Fast
Disadvantage: Currency exchange fee, fee for using CC abroad, (Deposit fee, if you have one)
Alternative 2: International Wire Transfer
Advantage: No manual involvement
Disadvantage: Takes several days, expensive (~$50), get lost sometimes
Alternative 3: PayPal
Advantage: Very fast, independent from residence
Disadvantage: ~3% exchange fee, % transfer fee, has to be withdrawn to Bank account
Alternative 4: Money transmitter
Advantage: Fast
Disadvantage: Needs to be picked up and deposited, expensive I think
Bitcoin:
Advantage: Can be cheap
Disadvantage: Takes a few days, manual involvement
Procedure:
• Consider buying Bitcoin locally if in the US, else buy Bitcoin from Exchange or Coinbase (each takes a few days until it is cleared, I think)
• Send Bitcoin to your account at an exchange in Europe
• Trade Bitcoin for national currency
• Withdraw to Bank account (usually a small fee applies).

Personal experience
Back when I did that last year, I was able to buy Bitcoin at a Bitcoin Meetup at Bitstamp spot-price. I transfered those to Bitstamp, traded, and ordered a withdrawal.

I had a confirmation that the money was headed to my bank account within 30 minutes, it arrived two days later. I actually made a few dollars on it, because the price had slightly increased between my local trade and the trade on Bitstamp.


If BTCUSD Price Drops Far Enough Are Transaction Fees Enough Incentive for Miners? There are some media reports that state that if the BTCUSD exchange ratio drops far enough, say below $5k per BTC, that mining will no longer be profitable. But, I do not see how this makes sense given that once bitcoin reaches 21 million coins the incentive for miners is limited to the transaction fee.

Wouldn't the transaction fees for mining simply go up to cover the cost of mining?

Wouldn't the transaction fees for mining simply go up to cover the cost of mining?

No, it wouldn't. Transaction fees are not related to the exchange rate. They are only related to the supply and demand of available block space. If not many people are transacting and blocks are not full, then there is an excess supply of block space and not a lot of demand for it. This will drive fees down, regardless of the exchange rate.

If the exchange rate were low enough that the block reward is not sufficient (regardless of the block subsidy existing), miners would simply stop mining. This will eventually reduce the cost of mining such that those who are still mining will become profitable again.


What is the origin of insecure 64-bit nonces in signatures in the Bitcoin chain? In Biased Nonce Sense: Lattice Attacks against Weak ECDSA Signatures in Cryptocurrencies Joachim Breitner and Nadia Heninger use a lattice based algorithm to recover private keys from signatures in the Bitcoin chain that were produced by insecure signers that generated biased nonces.

One large category of insecure signature that they discovered were 5,863 signatures between July 26, 2014 and June 1st, 2015 that were used in multisignature scripts where the nonces were only 64-bits in size. In the paper when a single key was used multiple times to sign multiple messages (which could be multiple inputs on a single transaction) with a small difference between the nonces their algorithm was able to determine the actual nonces used and the private keys with high probability.

Using a small nonce in multiple signatures is just an especially simple case of having a small difference.  Small nonces could also be attacked with simpler brute force search approaches without requiring multiple signatures but the paper's approach was much faster than brute force.  Their approach was also able to attack a number of 110 - 160-bit nonces which were used, a range that would have made a brute force search less realistic.

The authors were unaware of the origin of the 64-bit nonces but "hypothesize that this may be a faulty implementation intended for multifactor security, such as a hardware token".

What do we know about the actual origin of these signatures?

Based on the time-frame and my impression of the capabilities of the various groups developing wallet software during that period my initial guess was that the Bitpay copay software might be the source of these signatures. Copay is a multi-signature wallet which was initially released around that time.

As I'm not a javascript developer it took me a bit of effort to dig through the historical dependencies to find the code that was applicable at that time, but I believe my suspicion is likely confirmed:

[If there exists some tool to go grab all of the dependencies of a JS application as of some date that would have been super useful.]

  return new bignum(SecureRandom.getRandomBuffer(8));

This code chooses an 8-byte (64-bit) nonce.  I'm unclear as to how exactly this mistake came about--sending 32 to a function that took bits as a size argument, for example, would have made sense--but however it happened it wasn't caught in review and appears to have been shipped.

The pull-request that introduced the vulnerability was making the javascript cryptography implementation faster by switching the underlying EC operations to a different library, 'elliptic'.  At the time elliptic featured its own signing functions which included RFC6979 deterministic nonce generation. I don't see why bitcore wasn't changed to use the elliptic signing function even with the author of elliptic commenting in support of the PR but since there was pre-existing 'home rolled' signing code it just may not have occurred to anyone to switch to the library routines. There isn't a lot of discussion on the pull-request.

The vulnerability was subsequently fixed but weak signatures continued being created for some time.  Because Bitpay's bitcore was promoted as an all purpose Bitcoin library it's possible that other software than copay had adopted it.

I'm unable to find any announcement of or discussion about this vulnerability other than the fix in the repository.

Though I haven't carefully analyzed it, I noticed that prior to switching to elliptic that codebase previously used "bitcoin-js" which--at least in some versions--used a random number generator which was weak due to a review-evading subtle type error so it may well be the case that the error-introducing change simply changed the software from one form of weakness to another.

It's also possible that although bitcore had exactly the right vulnerability introduced at the right time that it was coincidental and the bad signatures found in the paper were created by some other implementation. If so, I think the parallel breakage is still informative.

I think the research and the relevant code make for a fine example of how easy it is to get these things wrong, how even small errors can result in total security breaks, and that the mere fact that something is open source does not automatically ensure that it has received adequate review.


What is the point of a bitcoin faucet? What is the motivation for the faucet owner?

Just to get a browser visit/IP address/plant some cookies?

George gave you the idealistic answer.  The cynical answer: the point is to get you to look at ads and produce revenue for the faucet operator, while paying you an amount of Bitcoin that you hopefully won't realize is equivalent to an hourly wage several orders of magnitude below sweatshop.


0.17 Specify Wallet with RPC/curl In core 0.17 they allow a user to dynamically specify wallets for things like getbalance. So with bitcoin-cli --wallaet='foo' getbalance

But I can't actually figure out how to do this with JSON RPC/ curl? It doesn't seem to work as a parameter or in the --data portion for curl. Can someone help point to how this gets included with an RPC or curl call? Thank you in advance.

with bitcoin-cli --wallaet='foo' getbalance

I think you're referring to the -rpcwallet flag.

Usage

The flag changes the endpoint. Try changing the url of the curl call to:

<rpc-url>/wallet/<url-encoded-wallet-name>

Example:

curl --user myusername --data-binary '{"jsonrpc": "1.0", "id":"curltest", "method": "getbalance", "params": ["*", 6] }' -H 'content-type: text/plain;' http://127.0.0.1:8332/wallet/foo


transfer funds from Mt.Gox after the crash of 2014 By now, 25/03/2014, you can view your funds on the Mt. Gox website. I have some euro's parked over there. Is there a way to transfer them. Is there a procedure you can follow?

Short answer: No.

MtGox assets are currently frozen and they have lost a lot of customer funds, both fiat and Bitcoin. Until further notice you can consider your euros lost.

Contact your lawyer and ask them to write a claim to official MtGox address. Also some local Bitcoin communities are preparing class-action (or similar) lawsuits against MtGox and its subsidiaries.


Is there any point attempting to vote when my hash power is so marginal? With regards to /P2SH/, is there even much point in voting with 500MHash or so of hashing power given that the chances of finding a block within the voting timeframe is incredibly slim? Not to mention that my vote will be shadowed out by miners with larger operations.

Is the voting system unfair in this sense? Or if I want my vote to count for more should I just be piling on more MHash to show a greater support of the network? (as in, people with more MHash are entitled to more votes because they help support the network more than I do?)

You can still vote by supporting a pool voting in the same way as you.

Voting is rather fair, as bigger pool operators have a bigger responsibility to their miners to keep the software up to date and operating according to their best interest. Thus mining in a pool is like voting for your representatives - you give your trust to them so they can work on benefiting you.


How do cloud hashing companies profit? (leasing hashing power) I think I'm missing something. There are a bunch of cloud hashing companies that lease hashing power. Let's take cointellect for example. They have contracts from 10 days to 24 months. If I buy a 10 mH/s of hashing power from this company for 99 euros, they guarantee a minimum of 2.2 euro daily return which makes 180 euros in return for my initial investment of 99 euros in the 3 month contract. How is this profitable for both me and the company? What's the math behind this?

When you're calculating the profit from Bitcoin mining, you take into account the current bitcoin price, how much hashpower you have, and the current difficulty.

Difficulty rises over time. (Generally speaking.) Between Jan '12 and Jan '13, difficulty rose by a factor of 2.9x.

Between Jan '13 and Jan '14, difficulty rose by 407.2x.

Between Jan '14 and now, difficulty has risen by 33.3x.

Unless they're guaranteeing 2.2 euros per day over the course of the contract, in which case they're either morons or liars. (If you really could guarantee that kind of return, investors would be all over you.)

Of course, as David Schwartz notes, it could also be a scam. They could give you good returns, then vanish after lots of people invest.


Did the new nodes accept the old blocks in hard fork? i had knew that the old nodes will reject the new blocks.how about the new nodes treating the old blocks?
i got the definition of the hard fork in the Hard Fork.but it didn't explain how did the new nodes treat the old blocks.


Which Bitcoin RPC call is used for setting transaction priority? Is there is any bitcoin RPC call for setting the transactions priority ?

The transaction priority is implied by the fee which you set for it. You can estimate the fee with your desired priority using https://bitcoincore.org/en/doc/0.16.0/rpc/util/estimatesmartfee/

Simply compute your transaction size (bytes) and adjust the transaction fee according to the sat/kB returned by the estimatesmartfee call.


Get non-wallet transactions using bitcoin rpc (gettransaction) I am playing around with Bitcoin-qt. I want to iterate all blocks and all their transactions.

So far I've been able to get a list of all tx's in the blocks I want to. Now I want to get information about the transaction: Amount, confirmations and so forth.

However, when I use the gettransaction method of the Bitcoin-qt API, it seems I can only get transactions from my own wallet.

For instance, I cannot say, because I get the error "Invalid or non-wallet transaction id (code -5) ":

gettransaction 0e3e2357e806b6cdb1f70b54c3a3a17b6714ee1f0e68bebb44a74b1efd512098

However, when I have a TX of one of my own transactions, I get a correct response.

My code

public void AddBtcTransaction(string hash)
        {
            List<string> parameters = new List<string>();
            parameters.Add(hash);

            var data = RequestServer("gettransaction", parameters);
            int i = 0;
        }

        public string RequestServer(string methodName, List<string> parameters)
        {
            string respVal = string.Empty;

            var rawRequest = GetRawRequest();
            JObject joe = new JObject();
            joe.Add(new JProperty("jsonrpc", "1.0"));
            joe.Add(new JProperty("id", "1"));
            joe.Add(new JProperty("method", methodName));

            JArray props = new JArray();
            foreach (var parameter in parameters)
            {
                props.Add(parameter);
            }

            joe.Add(new JProperty("params", props));

            // serialize json for the request
            string s = JsonConvert.SerializeObject(joe);
            byte[] byteArray = Encoding.UTF8.GetBytes(s);
            rawRequest.ContentLength = byteArray.Length;
            Stream dataStream = rawRequest.GetRequestStream();
            dataStream.Write(byteArray, 0, byteArray.Length);
            dataStream.Close();

            StreamReader streamReader = null;
            try
            {
                WebResponse webResponse = rawRequest.GetResponse();

                streamReader = new StreamReader(webResponse.GetResponseStream(), true);

                respVal = streamReader.ReadToEnd();
                var data = JsonConvert.DeserializeObject(respVal).ToString();
                return data;
            }
            catch (Exception exp)
            {

            }
            finally
            {
                if (streamReader != null)
                {
                    streamReader.Close();
                }

            }
            return string.Empty;
        }

        private HttpWebRequest GetRawRequest()
        {

            HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(ServerIp);
            webRequest.Credentials = new NetworkCredential(UserName, Password);
            /// important, otherwise the service can't desirialse your request properly
            webRequest.ContentType = "application/json-rpc";
            webRequest.Method = "POST";

            return webRequest;
        }

Any idea about how I would get information about transactions outside my wallet?

Enable txindex=1 in your bitcoin.conf (You'll need to rebuild the database as the transaction index is normally not maintained, start using -reindex to do so), and use the getrawtransaction call to request information about any transaction (it won't work for the genesis block's coinbase transaction though, it's a special case).

Note that this will only give you raw transaction data (you can add a 1 argument after the call to have it decoded instead of in hexadecimal notation), but it cannot know the payment amount or fees, for example.


What is the utility in the cgminer statistics While digging through the API of the cgminer I noticed that there is a value which I could not figure out what it means: the utility.

What does it stand for, what are common values and how is it calculated?

The Utility defined as the number of shares / minute

Its the number of shares your miner is contributing per minute. If you're looking at the overall Utility values, its the combined number of shares all miners are contributing per minute.

Reference: https://bitcointalk.org/index.php?topic=28402.0


How does BitGo Multi-Sig work? BitGo advertises, that each online wallet you create is a multi-sig. That is cool, since I see it as more unlikely to someone guess 2 of the private keys.

What I don't understand is how this multi-sig works, when I just go online by signing in with my email and starting a transaction. Where is the multi-sig part? It is just BitGo signing the transaction, but when am I using my PrivKey?

I hope the question makes sense. Thanks in advance

The multisig is all handled in the backend without you having to handle private keys directly.

BitGo stores your private keys too, presumably in an encrypted form which is protected by your password so they can't access the private keys. When you login, your wallet is loaded in your browser locally and it contains one set of your private keys. When you make a transaction, it is made in your browser and signed in your browser using the private keys that were loaded. This transaction is then sent off to BitGo who also signs the transaction, presumably after you use 2FA to authenticate the send. Then it is broadcast to the network.

The third set of private keys are ones that only you have. You should have downloaded those (along with the set that BitGo has in your encrypted wallet) when you created your wallet. That set of keys also lets you create transactions without BitGo being involved.


mining Cryptonote currency on scrypt and sha-256 miner I have a python miner which is only capable of scrypt and sha-256 mining. Is it possible to mine cryptonote monero on it? Pool link(i use minergate): stratum+tcp://xmr.pool.minergate.com:45560

Not possible.  Monero uses the Cryptonight hash algorithm which is distinct from scrypt and sha-256.  However, you should be able to find other CPU mining implementations for this algorithm.  The place to ask would be https://monero.stackexchange.com.


0 connections now, but I had been using Bitcoin QT for a while without problems I had been using my Bitcoin client for months on my Windows computer running XP.

One day, I have trouble connecting to anything else on the internet, but my Bitcoin client seems to be running okay. When I restart my computer, my internet eventually comes back, but I've had "0 connections" to the Bitcoin network for the past 2 weeks since.

I tried sending a test payment, and that payment was deducted from my wallet, but it never got broadcast. I figure it will get out once I finally figure out my connection issues.

I have my wallet backed up on a flash drive, but loading up that wallet data did nothing to help me establish network connections.

I am NOT stuck syncing. I'm just not connected or syncing at all. Everything else on my computer is otherwise running fine.

What is the best address and port to connect to? Are there good backup options?
If all of my addresses are correct, how do I figure out why I have 0 connections to the Bitcoin network, and how can I either reset those connections or otherwise get up and running again?

By using process of elimination , I would do something like this.

First, I would reinstall your Bitcoin wallet and see if it works. If it works properly, there was probably a Bitcoind configuration file that was messed around with in your original installation or you were using an outdated version.

If it still doesn't work, install a Bitcoin wallet on another computer on your network and see if it works. If it works, than probably there was something wrong with the Windows configuration (maybe firewall or antivirus program is blocking access). If it doesn't work, there is something wrong with your network (may be problem in your router, or internet provider)

On a side note, I wouldn't recommend running a wallet on Windows XP if you plan to keep any Bitcoins on it, due to it being incredibly insecure since Windows stopped supporting it.


I think I was scammed A few days earlier, a guy approached me claiming to mine bitcoins and multiplying my bitcoins 10 times.
I invested with $700 and the blockchain wallet after 24 hours showed me $7000 worth bitcoins.
But it was non-spendable.
The guy told me to give him half the commission so that he could approve the profits for them to reflect in my wallet which could be spendable.
I bought $350 worth of BTC and transferred them to The guy’s wallet address. And now he is asking for a transfer fee of $300 worth bitcoins So he can transfer my profits to my bank account.

The profits that reflected in my blockchain wallet are still non-spendable. His approval of the profits did not reflect that money in the wallet. And now he is asking for more money.

Is this a scam?
How can I recover my initial investment?
Where can I report him?

How we know this is a scam:

a guy approached me

That's a red flag, its how many scams start

claiming to mine bitcoins

That's another red flag, real miners don't approach strangers asking for $700 investments.

multiplying my bitcoins 10 times.

Another red flag, such big profits don't happen quickly - or at least are exceptional and cannot be predicted by a miner or investment expert or broker. In reality your $700 is almost as likely to turn into $70 as $7000.

the blockchain wallet after 24 hours showed me $7000 worth bitcoins

Another red flag. 10x gain in 24 hours never happens.

it was non-spendable

Another red flag. The scammer had altered the wallet to show someone else's money not money that you control.
What you see in a wallet isn't always real, a watch-only wallet or a watch-only / non-spendable address shows you someone else's money not yours.

The guy told me to give him half the commission

Another red flag, there's generally no such thing as commission in Bitcoin. Third-party business that act as a middleman may charge commision but you never really need to do business through a middleman.

now he is asking for a transfer fee

Another red flag, there's no such thing as a transfer fee normally. Theres a different thing that sounds similar - the transaction fee. But that should be a few cents.

Your questions

Is this a scam?

yes

How can I recover my initial investment?

You can't.
Beware. Now that you are known as having been tricked once. Other tricksters will contact you and offer to help you recover your money or tell you about marvellous people who can get your money back. All lies.

Where can I report him?

Local police.
They won't do anything for a $1050 loss though, other than provide advice and then update crime statistics, which may eventually lead to a change in their priorities.

How this happened
A bitcoin wallet doesn't contain money.
We talk about it as if it does but that's just a convenient shorthand, the reality is complex and its easier to talk about wallets as if they contained money. They don't,  it's an analogy, a misleading analogy alas.
A bitcoin wallet normally contains a secret number called a private-key. That's the only valuable thing in it.
Bitcoin payments are made to Bitcoin "addresses". An address is just a number, it doesn't identify a place or a person. Normally your wallet generates addresses from the private key using a mathematical procedure that can't be reversed. Wallets also allow you to add other unrelated addresses you want to watch (see the balance and payments in and out). Without the private-key for those other addresses you have no control over money sent to those addresses.
Even though you created the wallet yourself, you then gave control over that wallet to a criminal. The criminal changed the wallet by adding an address to it that they controlled not you. This is called a watch-only wallet or a wallet that contains a watch-only address. Some wallet show this money as "non-spendable". Same thing.
If you give control over your wallet to someone they can extract and copy the private-key. They can create their own wallet and put that copied private key into it, giving their new wallet control over any money associated with the original wallet. They could also (or instead) put watch-only/non-spendable addresses into the wallet.
Changing the password on a wallet has no effect on any extracted copies of the private-key that the fraudster made when you gave them access to your wallet.
You should throw away that wallet. Any money put into it in future is under the control of the fraudster no matter what passwords you change.

You mention that you use your email-address to access your wallet. I hope you didn't give anyone the password to your email account.
You may have created a type of online wallet called a custodial wallet - these are the least secure types of wallet. A custodial wallet is controlled by a business not by you. If the business goes bust, is hacked or closed, you have no money.

The terms and conditions at Blockchain.com say

5.5.2 When you create a Wallet, you must: (a) create a strong password that you do not use for any other website or online service; (b) provide accurate and truthful information; (c) protect and keep secret all credentials for the Wallet; (d) protect access to your device and your Wallet; (e) promptly notify us if you discover or otherwise suspect any security breaches related to your Wallet; and (f) use the backup functionality provided through the Wallet and safeguard your backup files. You agree to take responsibility for all activities that occur with your Wallet and accept all risks of any authorised or unauthorised access to your Wallet, to the maximum extent permitted by law.

(My emphasis)
You didn't do this unfortunately.


Is it safe to invest $100 Million in Bitcon I have currently $300 Million+ in bank account. Do you think is it safe to get returns by investing in Bitcoin considering it has hit Billions in Market Capitalization.

I suggest you instead spend some of that on a financial planning expert.


Who managed bitcoin and ethereum decision making? Who approves Bitcoin upgrades and forks? To my knowledge in Bitcoin and Ethereum decision makings are decided by the miners and developers. I like to know who makes the final say on the approval of a change to Bitcoin/Ethereum code or process? Is it a selection of miners/developers? Or is there a consortium or a foundation that has the final say for major/minor changes to the blockchains?

How are the developers who merge the bug fixes and other changes to the main(Master) blockchain Git branch are selected?

Is most of the decision making done on random forums and by websites volunteerly deciding to participate in these tasks? Why would a website decide to show the progress of voting on a particular blockchain fork? and how to ensure that site is credible?

You pose several interesting questions regarding the centralization of the governance and development of Bitcoin and Ethereum.

You accurately mentioned that decision making is done by miners and developers. There are some centralized repositories where the development of Bitcoin and Ethereum takes place. However, nothing prevents a developer from independently forking the code and adding their own changes which are not approved by the maintainers of the main git repository.

Who has the final say on the approval of a change to code? A change in the code is approved by the maintainers of the respective repository. These changes are reviewed, approved and merged by developers, not miners. However, even if a change is merged in the main repository, this does not mean that a miner will necessarily adopt it. If the repository maintainers approve a code modification that is undesirable, then some independent party observing the code changes (there are many who are looking at the pull requests and merges into the Bitcoin and Ethereum repositories) who does not have the ability to approve, disapprove, or merge code, will point out the problem in public forums. If an important problem is pointed out, it is possible that miners will not update their software. If miners choose not to update their software, the update will not take place, regardless of whether it is merged into the main repository.

Is there a consortium or a foundation that has the final say? While there are various foundations associated with Bitcoin and Ethereum, it is not possible that an individual or a group of individuals, solely based on their identity, will have the final say on any decision regarding code or process of a blockchain. The reason is that this would make the blockchain a centralized system. Instead, changes proposed must be accepted by miners. If a miner approves of a change, they will download the new code and run it; if not, they will remain in the older version.

A miner can always choose to run an alternative version of the software not approved by the main repository maintainers or foundations. That way, if the maintainers of the main repository are asked to put in a backdoor and someone detects this, it will not be possible to infiltrate the bitcoin network, as the miners will refuse to upgrade. A similar situation holds for changes that are economically undesirable to miners.

If a portion of the miners agree with a software upgrade, but another portion of the miners does not, then a fork will be caused. If the upgrade is soft-fork-compatible and the miners who do not upgrade are a minority, then they will be "carried over" to the blockchain produced by the majority who have upgraded, causing a "soft fork". This will force them to upgrade their node or risk losing their profits. If the upgrade is a hard fork, then the chain will be split into two, regardless of whether the majority upgrades. The minority will maintain their own chain. This is what happened between Bitcoin and Bitcoin Cash, where the change of block size increase was not approved by the majority, but constituted a hard fork change. The decision of which code version survives is hence up to the adoption policy of miners.

More details about the different forks are described in the paper "A Wild Velvet Fork Appears", which appeared in Financial Crypto '18.

Why does a website show the progress of voting on a particular blockchain fork? This display is purely informational and does not affect the decision. Decisions to upgrade or not are indicated on the blockchain by miners. These decisions are advertised through a "signaling" mechanism by which miners include their vote in their coinbase transaction, the transaction which pays them their profits. Because that transaction is verified by proof-of-work, it is impossible to fake - the miner that created that block really did signal their decision. Miners observe the signaling by other miners to decide whether they will upgrade.

For example, an activation period can be allocated by the developers during which miners can vote, by including their signal in their coinbase transaction, to indicate their preference. During this activation period, the feature is not activated. If a minimum threshold of signaling is indicated during the activation period, such as 90% of blocks, miners agree that they will adopt the new feature. This helps avoid soft forks where the majority has not upgraded. As long as most miners signal truthfully, this mechanism works. Signaling does not require developer or foundation approval and the adoption of a feature is not based on observing the statistics off of a website.

Despite the above, in practice, a lot of development relies on a few individuals who are major contributors. The fact that few people are involved in the actual development is studied in the paper "Egalitarian Society or Benevolent Dictatorship:
The State of Cryptocurrency Governance" by Azouvi, Maller and Meiklejohn which appeared in Financial Crypto '18.

To conclude, there are no individuals or foundations which have the final say on which feature will be included. Governance is performed in a decentralized manner in which software adoption by miners indicates which protocol will be followed.


So I’m kindve confused I have 4.25 btc in BitPay wallet so what’s the difference between a bitcoin worth 33k Just need to know the difference between the two and what’s the difference between the BitPay wallet and regular bitcoin

Bitpay is likely holding this bitcoin for you, so you legally own it, but it Is controlled by a custodian. The price of Bitcoin is simply the price you can currently sell that bitcoin for on the market.
If you want to fully own and custody your bitcoin, as you should once you're ready, you should withdraw the bitcoin to a personal wallet like Wasabi or Electrum, so that you no longer have to trust BitPay.


How transaction manipulation handles in Blockchain? I'm new to Blockchain and would like to understand few concepts in a detail.
After reading about basics of Blockchain, one thing is unclear to me about tx. manipulation.

For instance, A has some (i.e: $10) money and A is sending half($5) of it to B.
but C manipulate that transaction before going to Blockchain and set $10 instead.

Now, A wanted to send only $5, but some how A's account will get empty since miner will check A has enough balance or not.

How Blokchain resolves this type of scenario?

For instance, A has some (i.e: $10) money and A is sending half($5) of it to B. but C manipulate that transaction before going to Blockchain and set $10 instead.

This is not possible, provided the original transaction is signed correctly. In a regular transaction, you sign the inputs and the outputs. If someone changes the input or output amount, the signature is invalid, and the transaction will not be mined.


Sidechain vs layer 2 I want to know what's the difference between "sidechain" and "layer 2".
Is it the same thing ?
Thanks

The definition of a sidechain is more universally agreed than the definition of Layer 2. Some people might argue that sidechains are a subset of Layer 2 scaling solutions. Lightning Network is definitely a Layer 2 scaling solution.
Personally I would say the difference between a sidechain and Layer 2 is that Layer 2 scaling solutions such as Lightning are trust minimized protocols. They are designed such that trust in your channel counterparty (or anybody else on the network) is minimized.
Whereas sidechains (e.g. Blockstream's Liquid) do not seek to minimize trust, they instead make the design decision to lock funds up into a multisignature (in Liquid's case, a 11-of-15) onchain where the parties in that multisignature are trusted or relied upon to get the funds out of that sidechain. Sidechains make this choice because it provides greater efficiency (less reliance on timelocks), greater flexibility (you don't need to set most of the rules at inception), reduced fees (you don't need to pay routing fees like you do on the Lightning Network) and reduced capital constraints (you aren't constrained by the capacity of Lightning channels).


Coinbase & Hardware wallet relationship Aside from learning about all of bitcoin just for fun (mathematician with spare time), I currently own some bitcoin IOU's via Robinhood, but I would like to actually own my bitcoin (my keys, my coins! As they say).
I have been investigating Coinbase and hardware wallets like Nano Ledger S.
My understanding is that Coinbase is an exchange or market place where BTC can be bought and sold, but also offers wallet services.
My understanding of a hardware wallet like Nano Ledger S is that it is a very secure hardware device (cold storage, meaning completely offline) that will store the public and private key to my BTC wallet - and the private key to my wallet is synonymous with the bitcoin I hold. It has a 20 word mnemonic so if I hypothetically lost the device, I could buy a new one and access my wallet using the 20 word mnemonic. (I would also like to understand how buying a new Nano Ledger S and entering my mnemonic allows it to essentially restore to my old wallet, it seems like this would require the information to be stored somewhere. But I'll save that for a different question later on)
If my understanding above is correct, I would like to now understand the way transactions take place between the two concepts listed above.

I purchase X BTC on coinbase and it goes to my "hosted wallet" on Coinbase (X used as a variable representing the amount of BTC)
I can send the X BTC I purchased to my hardware wallet by giving the public key to my hardware wallet and specifying perhaps .99X BTC go to that wallet and the remaining .01 BTC is left as the transaction fee.
Coinbase broadcasts the transaction in the P2P network, sent around through full nodes in the network.
When this transaction gets grouped into a block and is mined, my wallet now contains .99X BTC meaning my public key shows up somewhere on the blockchain ledger that I have .99X unspent BTC associated to my public key.

I can repeat this process as many times as I like, continuing to accumulate more BTC in exchange for USD via Coinbase.

Eventually, maybe I want to liquidate some BTC in exchange for USD.
I can do this by using Ledger Live as described on the
ledger website here. Is this still "offline"? even when I "unlock and connect" my ledger device?
I use ledger live to send BTC to my Coinbase "hosted wallet" public key. When the transaction is processed I can sell my BTC on Coinbase market at the market value.

Is my understanding correct? And if so, how is my private key being used when I send BTC using ledger live? I think it is used to "sign" the transaction? So in some way is my private key vulnerable to nano ledger programming or software when sending?
I understand this is very amateur material, I have tried hard to learn on my own without asking here, but the quality of answers on this site, so far, have proven better than anything I have found on my own.

Your understanding is largely correct. I'll nitpick a few points for clarity, but overall I would say you have a decent grasp of whats going on here.

I can send the X BTC I purchased to my hardware wallet by giving the public key to my hardware wallet and specifying perhaps .99X BTC go to that wallet and the remaining .01 BTC is left as the transaction fee.

You will copy your bitcoin address to coinbase, not your public key. (In most cases, they 'pay-to-public-key-hash' (P2PKH) address is, as the name suggests, a hash of the public key). Your wallet will display bitcoin addresses, not public keys, so this is just a matter of terminology.
I am not familiar with Coinbase's interface, but there should be some sort of 'withdraw all' function. You will likely not need to specify a fee (in reality, Coinbase will likely just present you with a fee, which could include both a network transaction fee portion, and a Coinbase service fee portion).

When this transaction gets grouped into a block and is mined, my wallet now contains .99X BTC meaning my public key shows up somewhere on the blockchain ledger that I have .99X unspent BTC associated to my public key.

Wallets do not contain BTC. Wallets contain private keys, which can be used to sign transactions that spend coins which are locked to their associated bitcoin address. Once the transaction confirms, nodes on the network will be aware of an 'unspent transaction output' (UTXO), that is locked to an address that is derived from a private key, which your wallet holds.

I can repeat this process as many times as I like, continuing to accumulate more BTC in exchange for USD via Coinbase.

Yes, though when you eventually want to spend the coins, remember that it is more expensive to create a transaction which includes many small inputs, rather than just one or two larger inputs. See this question for info on fee calculations, and this one for fee info related to segwit transactions.

I can do this by using Ledger Live as described on the ledger website here. Is this still "offline"? even when I "unlock and connect" my ledger device?

The device connects to your computer via USB, and has a very restricted protocol for talking over the USB cable. Your private keys exist on the Ledger, and never leave the Ledger, so this is a more safe way of transacting, then just keeping the private keys on a device which is connected to the internet itself. The transaction can be created using software on your computer, and then that transaction is transmitted to the Ledger, signed, and the signed transaction is then transmitted back to your computer. Some other hardware wallets use different methods of communicating this data back and forth (eg SD card, QR codes, etc), but the general workflow will be the same.

I use ledger live to send BTC to my Coinbase "hosted wallet" public key. When the transaction is processed I can sell my BTC on Coinbase market at the market value.

Again, you'll send to a bitcoin address, but otherwise, this is correct. Note that when sending to coinbase, you will have more control over the transaction fee (and there will be no service fee, like there may be when you withdraw from an exchange).

how is my private key being used when I send BTC using ledger live? I think it is used to "sign" the transaction? So in some way is my private key vulnerable to nano ledger programming or software when sending?

Your private key will remain on the Ledger device, so you need to confirm the transaction looks correct, via the prompts on the device's screen. You should follow the hardware wallet manufacturer's instructions to ensure that you have received an authentic device from a legitimate retailer, and that it is running legitimate and up to date firmware.
Hope that helps!


Can I look for transaction in the genesis block? I'm testing bitcoin and, as an experiment, I added a transaction after the coinbase to the genesis block. However, it appears that it can't be searched with the rpc commands. Why is that?
I already read that the coinbase in the genesis block can't be spent and this is ok, but what about the other transactions?

There are no other transactions in the Genesis block. For all intents nothing in that block is worthwhile inquiring information about.


Which release fixed CVE-2010-5141 (attacker can spend any coin) This post by Mike Hearn relates an interesting bit of history:

  When Bitcoin was first released, it contained two completely fatal bugs that made the entire system worthless. Fortunately, they were found and fixed before Bitcoin  actually had any serious value.

  The first bug was that scripts were concatenated before being run instead of just using a shared stack. This meant that anyone could write a scriptSig that always evaluated to true and claim anyone elses coins. Fixed here in v0.3.2:

  https://github.com/bitcoin/bitcoin/commit/73aa262647ff9948eaf95e83236ec323347e95d0

However, the link appears to point to the 0.3.7 update.

Looking at the diff, this update does appear to change the script interpreter in the way Mike outlined.

A search turned up very little on the 0.3.7 update. One hit was this question, which generated no responses:

  I noticed that 0.3.7 is released on the website, but after searching the forums I can't find any information on what the changes are.  Never mind that the changes from version to version should be packaged with the download....

  anyone care to clue me in on this one?

The CVE page, however, makes this claim:

  On July 28 2010, two bugs were discovered and demonstrated on the test network. One exploited a bug in the transaction handling code and allowed an attacker to spend coins that they did not own. This was never exploited on the main network, and was fixed by Bitcoin version 0.3.5.

So, depending on the source you use, the release that fixed the bug was 0.3.2, 0.3.5, or 0.3.7.

Given that this was one of the worst bugs in Bitcoin's history, it seems like the documentation should be more consistent. Can someone point me to other sources that might help clear things up?

The 0.3.7 update does indeed fix the script execution bug that is being described, the vulnerable code below is removed and replaced with functions that execute the scriptSig and then the scriptPubKey on the same stack.

if (!EvalScript(txin.scriptSig + CScript(OP_CODESEPARATOR) + txout.scriptPubKey, txTo, nIn))

Previously what would happen is that the two script tapes were literally concatenated, then executed as one. The problem here is simply that we can use a trailing OP_PUSHDATA in the scriptSig push the entire scriptPubKey to the stack as a single data element rather than discrete opcodes. Our scriptSig would simply be a push opcode for the length of the scriptPubKey plus an OP_CODESEPERATOR. At the end of execution the only element remaining on the stack is not zero, so the evaluation returns true and we can spend any coins we like.


Unable to return BlockHashes when I run this generatetoaddress I have downloaded and fully synced with my Mac last Saturday, my Bitcoin Core version is v0.21.0 and my Bitcoin-Qt version 5.9.8.
I did run other RPC commands such as "getrpcinfo" and it did provide result:
{
"active_commands": [
{
"method": "getrpcinfo",
"duration": 72
}
],
"logpath": "/Users/jsjs77/Library/Application Support/Bitcoin/debug.log"
}
"getbalance" -
￼
{
"mine": {
"trusted": 0.00000000,
"untrusted_pending": 0.00000000,
"immature": 0.00000000
}
}
But then, when I want to run this "generatetoaddress nblocks "address" it does not provide block hash result:
￼
generatetoaddress 11  1MDihWw2UfkYyAwrQDWNFbmaH6bx4NBFtL
￼
[
]
I have tried the following methods:
bitcoin-cli generatetoaddress 11  1MDihWw2UfkYyAwrQDWNFbmaH6bx4NBFtL.
￼
Method not found (code -32601)
and
bitcoin-cli -regtest generatetoaddress 11 1MDihWw2UfkYyAwrQDWNFbmaH6bx4NBFtL
￼Method not found (code -32601)
Is this got to do with the changes of latest version? I really need help. Thanks

Open bitcoin.conf and its default location on Mac is $HOME/Library/Application Support/Bitcoin/bitcoin.conf

Save bitcoin.conf with:

regtest=1

Launch Bitcoin Core. You should see a logo color similar to stackexchange:

Open console and run the below commands:

A. getnewaddress
B. generatetoaddress 11 [Address returned in A]


(CHECKSIG) Why is the ScriptPubKey from tx-inputs part of the signature? I was checking OP_CHECKSIG today and see that the signature of a transaction will be computed from the transaction but copying the ScriptPubKey from the transaction referenced as input into the SigKey of the new transaction.

I guess this has something to do with tx malleability, but I cannot see in what case this would really help? The tx-inputs already reference IDs that can be changed implying malleability.

It would only make sense to include the inputs ScriptPubKeys if it would be possible to keep an ID while changing its ScriptPubKey (which is not possible), or am I missing something?

I am refering to this graphic Step 7 + 8:
https://en.bitcoin.it/w/images/en/7/70/Bitcoin_OpCheckSig_InDetail.png

AFAIK this was a design choice by Satoshi originally that is unnecessary for the reasons stated in the OP. There is a comment about this in bitcoinj

  // Set the input to the script of its output. Bitcoin Core does this but the step has no obvious purpose as
  // the signature covers the hash of the prevout transaction which obviously includes the output script
  // already. Perhaps it felt safer to him in some way, or is another leftover from how the code was written.

However, it should be noted that there is value in signing particular parts of the previous transaction. Segwit just implemented a new transaction signature algorithm to the cover the amount of satoshis a input is spending from a given output.


How does BitPay detect unconfirmed transactions so quickly? I understand that BitPay accepts unconfirmed transactions.  My question is how they manage to find these so quickly?!

In my limited experience, even an unconfirmed transaction doesn't appear on my node for some time.

That is feature of Bitcoin node network.

When your client sends your transaction to network, every node is also sending your transaction to every other connected nodes. In about 5 seconds it is broadcasted in every place in world.


How much Bitcoin will I mine right now with hardware X? Say I have a given piece of hardware (CPU/GPU). Where can I find out how much Bitcoin will I mine per day?

Go to http://bitminter.com/test and click the "test start" button. If you have Java installed the miner should launch. Click "engine start" on your GPU(s) to start mining and the GUI will show how many bitcoins per day you will make (on average).

Note that you are actively mining in a pool without getting paid. This test page launches a version of the miner which is only meant to be used for a short time for testing.

Update for 2015: CPU and GPU mining are both long dead. When you buy ASIC mining hardware you will know its hashrate before you buy. Don't buy if you don't. Google "bitcoin mining calculator", input your hashrate, and it will tell you how much you can earn right now, on average. Note that the difficulty will change in the future so your earnings will not stay the same. Also note that with most pools actual earnings vary with luck. Finally, avoid the typical newbie mistake of confusing TH/s and GH/s. 1 TH/s = 1000 GH/s.


Direct Deposit From Employer To BitPay? I searched the site to see if this had been asked and don't see it.  A friend of mine told me yesterday that I could have a portion of my direct deposit directed to a BitPay account that could auto-buy a portion of a bitcoin (like $20 each check).  I searched their site and I couldn't find the routing/account number combination that would be required.

Is this correct and (or) how would someone who's looking to put a small amount of money toward bitcoin each check do this?

Thanks.

I am not aware of BitPay providing that service.

The most well known company that specializes in what you describe is BitWage:

https://www.bitwage.com/

Maybe that is what your friend meant since they have similar names,


Direct vote and SCP quorum So there is a fixed 1% annual rate of new stellar creation. These new stellars will be generated on a weekly basis and distributed via a direct voting method.

But, there's a distinction between what the direct vote agrees on and what the SCP nodes agree on. What happens if some nodes running the stellar-core protocol don't agree with the distribution? They can choose not to vote the validations of transactions related to this newly created stellars, impeding a quorum to form in the SCP, rendering the newly created stellars obsolete.

The inflation voting and the federated voting in the SCP consensus algorithm are happening at totally different levels of abstraction.  Inflation voting is a property of your wallet, stored in the ledger.  Whatever you set it to stays in effect until you change it.  The inflation algorithm, when it is run, just goes off the inflation votes in the ledger.

Now a validator in SCP could try to prevent you from changing your inflation destination, which would be the same as trying to prevent you from sending a payment.  If that validator (or some validator it is colluding with) happens to be the highest priority node in the nomination protocol for one ledger, then it could indeed potentially censor that request for that ledger.  But as soon as an honest validator leads the nomination protocol, the previously censored transaction will make it through nomination into the balloting process.

Once the inflation adjusting transaction makes it through nomination, bad validators could refuse to participate in SCP balloting, which is akin to crashing.  Whether or not that crash brings the network to a halt depends on whether there are sufficient remaining good nodes to form a quorum.


I lost my bitcoin wallet I have an address in an investment site I did some investments. Want to withdraw right now, but I can not remember what wallet that address is linked to. Can I trace an address to a wallet?

With only the bitcoin address, there is no way to discern which wallet was used.

Bitcoin addresses do not contain this sort of information, if they did it would be detrimental to user privacy and security.


How does Internal Keychain exactly work? I understand that an internal keychain is used to receive a change of payment when I pay someone.

For example, I pay $20, but it costs $17, so I get $3.

But what I don't understand is how can there be a change? When I send 1 BTC to someone, how does the receiving end determine that I overpaid by 0.9 BTC and send that back to me?

Bitcoin does not have the concept of account balance. It works on consuming the bitcoins that you have earnt in prior transactions. However, you cannot consume partial amounts. So according to your example, when you are creating a new transaction, in the inputs you will reference the transaction where you earnt the 1 BTC (it may be a single transaction where you got your 1 BTC, or you might reference multiple transactions whose values all add up to 1 BTC) and consume it entirely. Now in the outputs, you will send 0.1 BTC to address A and say 0.895 BTC to your change address. The difference of 0.005 BTC will go as mining fees.


How could a large owner of Bitcoin give back to the Bitcoin community in an equal way? If there was one large owner of Bitcoin, for example somebody who owned 3% of all mined Bitcoins, would there be a way for that person to give back their Bitcoins in an equal way? I'm thinking more along the lines of equally giving their money away to other Bitcoin holders based on how much money they had invested in the currency, not really along the lines of using their wealth to lobby companies to accept Bitcoin.

By destroying his coins ( sending them to an address noone has the private key for, like 1nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn )


You appear to be using the main Bitcoin network but the transaction you are spending from does not exist on mainnet. It only exists on the test network. You need to restart your node in testnet mode in order for it to work.


Is there a user-friendly tool for creating and signing raw transactions? The title stands for itself.

The only tool for doing so I know of is the bitcoind daemon, but it is for from user-friendly.

A web-tool in JS would be ideal or a simple CLI tool with clear documentation.

Electrum has a gui form for just that. Also I think brainwallet.org has a web form that works offline and runs off github source directly so you can verify privacy concerns.

Edit: also see:
http://bitcointalk.org/index.php?topic=40264.msg851062#msg851062

As referenced in Transaction signature generation


How does a blockchain store any data? I read here that since Bitcoin is a networked ledger, it is a good way to back up data. I would like to know two things:

How does a blockchain store 'any' data? I would like to know more about a blockchain's anatomy that enables it to do so.
If anyone can store data in blockchains, what prevents blockchains from becoming astronomically larger? Even today, a Bitcoin client takes forever to synchronize.

Most people think of Bitcoin as a currency, but this is only one use of its protocol & network.

No. It is just a currency. The Bitcoin protocol can be used for different services, but the Bitcoin network is certainly not for gene distribution, or any other form of data back-up. That is not the intention of Bitcoin. You can, however, abuse the protocol to store unnecessary unrelated information. And yes I say abuse, because we as normal Bitcoin users have to download larger blocks for reasons that are opaque to us and no not necessarily concern us (like your genetic code). They are interfering with the purpose of Bitcoin.

Getting to your questions now:
you cannot really store data in Bitcoin in a normal fashion, simply because that is not what Bitcoin is concerned with. You can, however, embed additional information in transactions, which are broadcasted and distributed to the network, in multiple ways, thus essentially storing your information in the blockchain. This assumes you know the storage format of course, since you need differentiate the ordinary transaction information from your additional data.

No nothing prevents the block chain from getting arbitrary large. In practice, however, this will not fill your hard drive so fast (especially if you take Moore's law into consideration), because you need to pay a fee for each transaction per kilobyte.


How to make sure that bidders in an auction have sufficient Bitcoin without storing money for them? I am new to bitcoin programming, and want to build some apps to get more familiar with it.

What I am curious is, how could I implement a basic auction site.

I want to make it as automated as possible. So, the basic process would be:

There would be a countdown for the bidding. Users can then send bitcoins to me (or say they will pay that amount?)
The person that has said they will pay the most at the end wins and everyone else gets their bitcoins back.

Some things that worry me:

I want it to be secure. Ideally, to bid I don't have to store all of your bitcoins on my server while the auction is on, but I still want to make sure you have the amount needed to bid. Is that possible? One way, like many seem to do, is to have users load up an account with bitcoins and then bid, but ideally, I'd like to not have to store the users bitcoins just in case they do not want to trust me.

Whatever happens, I want it to be automated. So at the end all the users get their coins back that lost, the winner automatically gets their bid taken from them.

Any thoughts on this? It looks like something like this could be implemented with Bitcoin Scripts but those are not quite implemented fully yet, correct?

Any help/thoughts would be awesome!

The correct way to do this (beware: extremely technical) is to:

Reserve a coin of your own for each auction (the "auction coin"). This shouldn't be too big (you will lose it until the auction is over), but try not to make a dedicated one just for the sake of the auction (use a small one you already have!).
Create an address for the auction's winning bid (the "auction address"). This can be a normal address, escrow address, or whatever.
Bidders should create a raw transaction consuming this coin as an input, and paying to the auction address. They should sign the transaction for all their own coins (added to the auction coin), and send this to you immediately to place their bid.
When the auction is over, you then sign the highest bid's transaction for the input consuming the auction coin, and broadcast it to the network. Note that this will invalidate all the other bid transactions you were sent.
As soon as this winning bid confirms, you deliver the auctioned product. If it is double-spent, you then pick the next highest bid and repeat step 4.