Blockchain and user rights to ask for personal data removal Some countries (France with the CNIL, and more generally European - but probably many other - countries) have laws that give the right to users of online services to ask for permanent unsubscription / personal data removal from their database.

This seems impossible with a blockchain technology: we cannot remove past blocks without breaking the whole structure integrity.

It might not be a problem with BitCoin, for which there is no real personal data (data is linked to a private/public key, not to a username / physical identity), but still those questions might apply more generally to the growing blockchain industry.

How to deal with the legal right of data removal for users in a blockchain paradigm?

In general, cryptocurrency is not an online service separate to the user, the user is a node and is a part of the service. Still, the definition of online service is not a good fit for the most part.

Speaking of Bitcoin, the only personal data is your private keys. Everything else is broadcast at some point, it is like beaming some of your public data into outer space via satellite, bouncing from star to star (node to node) and then saying that you want it taken down. Only your private keys are personal data and they are never broadcast (unless you make a bad mistake outside of Bitcoin!).

If it comes to law, the purpose for deriving your public keys and addresses is to send/receive Bitcoin which requires broadcasting. You can no sooner take it back than you could mistakenly post a valentine in a print newspaper then expect the newspaper to take back all copies and have your public data erased because you have changed your mind.

The EU cannot control or regulate blockchains.

EU laws are null and void with respect to blockchains.


What is the recommended OS for compiling a Windows binary for Litecoin? I'd like to compile Litecoin for Windows, but have difficulties doing so. To be specific: I want to create the Windows executable (.exe) GUI (qt) Litecoin client (to be more specific I want to compile the executable for an alt-coin based on litecoin, but the code base is the same as litecoin).

Many tutorials are either focused on compiling for Linux, or they focus on Bitcoin compiling, which is a bit different nowadays than Litecoin. Rather than explaining my specific problems, which are likely unique to my situation, I was wondering what a recommended Operating System (and version) is to compile Litecoin? Who has specific (preferably smooth) experience building the GUI litecoin client for Windows?

A useful relevant topic is this one:
https://bitcointalk.org/index.php?topic=149479.0

But this is based on bitcoin, not litecoin. This referenced tutorial has a bit on Windows, but it's not too optimistic:

  Windows -Qt

  This is the trickiest one to crack of the GUI wallets. I am going to
  detail how I got this to work and offer you an easy way to get the
  dependencies in an attempt to make this work for you too. That said,
  it may not–and I’ve already said I won’t do tech support. So here’s
  the deal. I got this to work and then duplicated it on a second
  machine to ensure it wasn’t a fluke! Most of the information needed to
  compile the basic coind.exe or GUI wallet is in this thread:
  https://bitcointalk.org/index.php?topic=149479.0 Unfortunately nothing
  is as easy as it seems, and although the MinGW and QT installs went
  fine, I couldn’t compile it without a few tweaks to the .pro file.

In this tutorial, Windows is used to create the executable, but I understand one can also use Linux to create Windows executables, right? There are few experiences documenting successful or smooth compiling of Litecoin (forks) for Windows, so I was wondering if people do have good experiences doing so and what kind of OS or approach they used.

The Litecoin source tree, in the doc/ folder, provides a file regarding building on Windows, using MinGW and MSYS. I can't personally vouch for those instructions, never having used them myself, so if you go that route, good luck. The way that the release binaries are built, if I'm not mistaken, is using the Gitian builder. If you're looking to do a Windows build, I would try that. If you want to actually use Gitian, you can clone the repo, and use the readme file to get Gitian set up, and then follow the build segment of the release process to do the actual build. On the other hand, if you're not necessarily looking for determinism or the ability to reproduce the exact build, you could try taking a look at the Gitian build scripts to see what packages are being used, what commands are run, et cetera, and try to reproduce that on a Linux system.

I have compiled litecoin-qt on Ubuntu 12.04 before. First install the necessary packages:

sudo apt-get install qt4-qmake libqt4-dev build-essential libboost1.48-all-dev libssl-dev libdb++-dev libminiupnpc-dev

Then, in the directory of the litecoin source code, run

qmake
make

And you're done!

However, the compiled file is a Linux binary, so you'll have to use it on Linux. As far as I know, trying to compile a Windows binary on Linux would be even harder than just compiling it on Windows.

Note: This answer was posted before the question was clarified.


How to compute profit and loss with currency trading? I can't seem to wrap my head around this.  Let's say we have these fake trades between two currencies

        C1  C2      Rate    dPIP    Trade   Value C1    Value C2
Day 1   1   0       10      0       buy      1          10
Day 2   0   10      10      0       sell     1          10
Day 3   10  0        1     -9       buy     10          10
Day 4   0   1000    100    99       sell    10          1000
Day 5   5   0       200   100       buy      5          1000

Day 2 you decide to short and overnight it crashes to 1 on Day 3.  So you buy.  Your holdings for Currency 1 (C1) go up 10x.  But the value of your holdings doesn't change.  Likewise you decide to short on Day 4 after seeing a 100x jump.  On Day 5 you get cold feet and decide you sold too soon and buy in again at 2x at a loss.

How would you compute the running profits and losses (and which currency should be referenced)?  For Example on Day 3 you made 9 of C1.  Day 4: 990 of C2, Day 5: you lost 5 of C1.  What is the right way to track the P&L because they are relative to each other.

And what is the overall yield?  In the end of it all you went from C1=1 to C1=5 or in terms of C2...C2=10 to C2=1000.

EDIT:  I've looked that this some more.  If I look the change in C2 values during sales and the change in C1 values during buys I think I get the trade-trade yield.  Does this look correct?  Could then be summed to show the accumulative yield?

Example C1 yield (2nd buy) Yield=((10-1)/1)*100 = 900%

        C1  C2      Rate    dPIP    Trade   Value C1    Value C2    Yield %
Day 1   1   0       10      0       buy      1          10
Day 2   0   10      10      0       sell     1          10            0
Day 3   10  0        1     -9       buy     10          10          900
Day 4   0   1000    100    99       sell    10          1000       9900
Day 5   5   0       200   100       buy      5          1000        -50

So if you add up the yields you get 900+9900-50=10750%, but if you look at the yield on C1 it is 500% vs C2 at 1000%.  Obviously I'm not doing something right.

I will assume that the base currency is C1 since that is the initial balance.

Day 1: 1 C1
Day 2: sell 1 C1 for 10 C2, no change in price, so 0% gain, still 1 C1
Day 3: price falls to 1 C1: 1 C2, so 900% gain, sell 10 C2 for 10 C1
Day 4: sell 10 C1 for 1,000 C2, no change in price, so 0% gain, still 10 C1
Day 5: price rises to 200 C1: 1 C2 from 100 C1: 1 C2, sell 1,000 C2 for 5 C1, so 50% loss, now 5 C1

To sum:

0% gain by 900% gain by 0% gain by 50% loss
= 1 * 10 * 1 * 0.5
= 5
= 400% overall gain

I can provide more detail if needed, but a base currency must be selected.  The price only needs to be taken into account if there is a position still open; in other words, the price should be applied in this case if you still own something other than C1, the base currency.

If all positions are closed out before accounting for gains, only the trades need to be used to calculate the rate of return.

The simple formula for measuring relative prices is x_final/x_initial, and the change/return/yield is x_final/x_initial-1, with gain >= 0% and loss <= 0%.

Directly applying this formula to the trades, denominated in C1 is:

(10 C2/1 C1) * (10 C1/10 C2) = 10
(1000 C2/10 C1) * (5 C1/1000 C2) = 0.5

The overall relative prices is 5, expressed in percent is 400% because the percentage gain of 5 is (5-1)*100%.

If there is an open position, to account for change:

(# of C1 paid/# of C2 received) * (current price expressed as quotient of C2/C1)

Arithmetic vs geometric returns

I reread the final portion of your question.  First, the calculations are incorrect, so you should follow my example.

Second, one cannot add returns, the total arithmetic return.  They must be calculated geometrically, and that is why the each final/initial should be multiplied.

There's a new crypto trading platform that automatically calculates all your P&L based on average buy price (which is also auto-calculated) and measures your trading performance.

Take a look on demo: https://whenlambo.trade/demo


Bitcoin client downloads blocks from different peers When a bitcoin client downloads blocks from different peers, how does it determine the number of blocks to download from which peer?

Since Bitcoin Core 0.10, the following mechanism is used:

We start off by asking peers for their best headers, and thus learn the most-work chain's headers quickly, and which peers have which parts of it available.
In the background, we continually ask peers for their blocks, in sequential height order, under the following conditions:

If a block is already asked from another peer, we don't ask for it again.
If a peer's known best block's corresponding chain has less total work than our currently active (fully downloaded and validated and accepted) chain, we ignore that peer - they'd only get us onto a fork that's worse than what we have.
If the only available blocks from a given peers that aren't already being downloaded already, are more than 1024 blocks ahead of our currently active chain, we don't ask anything (more) from that peer.
If there are already 16 or more blocks in transit from a given peer, we don't ask any more blocks from that peer.

All of this is subject to various timeout rules. In particular, when we're waiting for blocks from a single peer before we can download more from everyone else (because every other block in the 1024 that succeed our active chain is already downloaded), we disconnect that peer, and mark all its in flight blocks are available for fetching again from others.

At the start of a connection, you send a getblocks message containing the hash of the latest block you know about. If the peer doesn't think that this is the latest block, it will send an inv that contains up to 500 blocks ahead of the one you listed. You will then request all of these blocks with getdata, and the peer will send them to you with block messages. After you have downloaded and processed all of these blocks, you will send another getblocks, etc., until you have all of the blocks.

You will send the getblocks message to all the connected nodes.
Say you have block height upto 100 and blockchain is upto 1000 height, you send a getdata request to connected nodes, and accept the first inv message you recieve, now you have data upto 600 height, and you send getdata request again, and first inv message you recieve will fill you blockchain to 1000 height this time.
(This is how I think it works, i am not sure if first inv message is selected or it waits for more inv, hope someone clarifies that)

You can read more on network topology here:
https://en.bitcoin.it/wiki/Network


Self assembling of hardware for bitcoin mining Are there any guides or material available for helping us build dedicated ASIC hardware for bitcoin mining .

You can't build ASIC hardware yourself. It costs hundreds of thousands of dollars to develop an ASIC and, by definition, you can't buy them off the shelf. (The "AS" stands for "Application Specific", that is, it must be designed for a particular purpose.)

Let's take a look at this from a basic level.  Coins of any type are mined through complex math problems being solved by various devices that all have exactly  3 things in common.
1. They are powered by some sort of processor (or multiple processors) that perform the calculations.
2. They all have some sort of memory or storage area where the program for solving the problems resides.

They all access the internet so that they can actively mine coins.

Let's see.  Computers can do it! (cpu mining) Graphic Cards do it!  (gpu Mining), do you see a pattern developing here?  With Chips being amazingly cheap and readily available, and code being freely shared via the net, It is entirely plausible that one could develop and build coin miner.

It's called Hacking, or at least it used to be.  Taking stuff apart to see how it works, researching things to see if you can do it yourself or better yet, come up with a more efficient way of doing it.

You don't have to spend thousands of dollars to devise a way to make your own ASIC or similar device.  You just need the dedication, drive, and motivation to do so.


How can I sell my Bitcoin Gold? Do any exchanges support BTG deposits? Given I have Bitcoin Gold in my own wallet, what practical ways are there to trade this, either to other crypto-currencies or to fiat? Is there a list of exchanges that support Bitcoin Gold deposits?


Segwit change address from Regular address I would like to move my bitcoins to a Segwit Electrum wallet, however - I don't want to pay the high fees for the initial transfer.
I though about using the change address, so that when I make payments with the regular Electrum bitcoin wallet, the change will be automatically sent to the Segwit address. Is it possible with the non-Segwit Electrum wallet? How do I set it up?

It's not possible to do this automatically. Electrum doesn't mix and match segwit and non-segwit address types in the same wallet.

My suggestion is to first educate yourself on what using an Electrum segwit wallet will mean. Electrum uses bech32 addresses. You can read more about the implications of that here.

Next, if you decide you want to move to segwit after all you can create a new electrum wallet choosing segwit as the type and then move your coins there. In order to save money you can low ball the fee. Fees are actually quite low these days so you should be able to do this quite cheaply.

Electrum allows you to send money to multiple addresses in a single transaction so the next time you send bitcoin you can choose to send the balance funds in your wallet to an address in your new segwit wallet. To send to multiple addresses you enter the addresses as follows on the pay to field on the send tab:

1BitcoinEaterAddressDontSendf59kuE,0.5
bc1addressdfdfdfdfdfdfdfd,1.55

That is addresses and amounts separated by commas. Each address + amount on a separate line.

No, it's not possible since Electrum using Bip44 for Regular bitcoin wallet and bip49 for SegWit wallets.

So derive path of legacy bitcoin wallet is m/44'/0'/0'/0/i and for SegWit its  m/49'/0'/0'/0/i.

even if they're using the same path it's not possible to change address type.

if you are creating your transaction manually I guess that you can create SegWit address instead of legacy bitcoin address but new bech32 SegWit addresses aren't supported by Electrum or Bitcoin-core so you should create legacy SegWit address.


what is the lowest amount i can transfer using bitcoin ? can i send 0 satoshis? i was looking at this bitcoin tx

https://blockchain.info/tx/b4ea693a9d2d7e32b66777964fce13da302bed024bd9fd4651919da650fb1c40

where

Inputs and Outputs
Total Input 0.00003 BTC
Total Output    0 BTC
Fees    0.00003 BTC
Fee per byte    12.821 sat/B
Fee per weight unit 3.205 sat/WU
Estimated BTC Transacted    0 BTC

the user has set total output as 0 BTC so in short all input is given as fee.

Is this common practice or bug ?

This is unexpected (but valid) behavoiur of mining pool software. btw, i am creator of this tx

rules are defined here:
https://en.bitcoin.it/wiki/Protocol_rules#.22tx.22_messages

it says "reject if the sum of input values < sum of output values", which is not the case. So a valid tx, where you spend all amounts to the miner...


Bitcoin Energy Consumption and Carbon Footprint a good long term investment? How can Bitcoin a good long term investment, given one transaction is equivalent to carbon footprint of 986,125 VISA transactions?
If they use the Lightning network which takes transactions Off the Blockchain, wouldn't that defeat whole purpose of having ledger transaction?
https://digiconomist.net/bitcoin-energy-consumption/

I have read somewhere that every Bitcoin transaction is "equivalent to the power consumption of an average U.S. household over 22.86 days.". Is that true? Isn't that horrible?
tl;dr: Most people don't value Bitcoin as a payment mechanism, and even if they
were, most payments are not recorded on-chain. So calculating the energy cost of
a transaction is as impossible and nonsensical as it would be for gold.
It's true in a similar way that the lack of pirates is causing global
warming.
Yes, this is a valid estimation of Bitcoin mining's energy use divided by a
valid estimation of on-chain transactions, compared to a probably valid
estimation of household electricity use.
However, connecting these three figures in this way doesn't yield any insight
beyond shock and awe. That's because Bitcoin's primary value is not as a payment
network, so the number of on-chain transactions is not an interesting metric for
it. This can be seen easily: On one hand the number of onchain
transactions
has always been limited — and that limit has been pretty much hit constantly
since at least 2019. On the other hand, the value of Bitcoin, as well as the
estimated number of its users, has been rising over many orders of magnitude
since 2009. How can this be possible?

In recent years, long term store of value has become Bitcoin's main use case. That is, people use it more for storing their savings than for paying for goods and services.

Its current usage is thus more comparable to gold, which is also rarely used in transactions. I have never seen anybody calculate the energy cost of gold mining plus handling divided by the number of physical gold shipments. Probably because that's as misleading a number as the equivalent in Bitcoin.

Just as with gold, there are ways to make even small transactions quickly and cheaply with Bitcoin. Most real-world transactions use one of these off-chain methods. Probably the most popular today are custodial services like exchanges. Sending bitcoin from one customer to another on a service like this just requires changing two numbers in their database and is the equivalent of gold in a bank changing owners. It's hard to say how many such transactions there are, since there are many "bitcoin banks" and their numbers are proprietary, but it's safe to say they dwarf on-chain transactions by orders of magnitude.

Unlike gold, there are methods of transacting Bitcoin off-chain that require less trust in intermediaries, such as the Lightning Network or Blockstream's Liquid federation. With a growing demand in transactions, such alternatives are refined and gain popularity, without this being reflected in the above numbers. With the Lightning Network, it's even difficult to estimate how many transactions are being performed, since there is no central ledger recording them all.

But I have read that Visa transactions are much more economical!
That's because these are very different things. Visa transactions are just a few
companies changing a few numbers in their databases. It's basically just a fancy
way of signalling an intent to spend something. It's not final. There might not
be a real transfer of value happening at all (all the "money" is still debt in
the same bank, just on another account).
On the other hand, a Bitcoin onchain transaction is a real transfer of a bearer
instrument, comparable to a gold shipment from one central bank to another.
Those are also quite expensive, I imagine. It's total overkill if you want to
buy a coffee. For that, it might be enough to just update some numbers in a
(Bitcoin) bank. Or use the Lightning Network.
If you have a little time, Nic Carter has explained it much better than me.
If you have more questions regarding Bitcoin's carbon footprint, I recommend the FAQ at netpositive.money

Bitcoin's energy consumption is not a long-term problem.  It is a short-term red herring being used by those afraid of Bitcoin's eventual sweeping adoption.
There are already plans being developed to make Bitcoin's mining inefficiencies (energy consumption) independent of terrestrial sources of energy.


Which Bitcoin escrow services are available - and reliable? For some transaction, the possibility of generating "chargebacks" might be very useful. For example, when trust cannot be established between both parties. In such cases, a trusted third party may be very helpful. One very well known and reputable Bitcoin escrow service was ClearCoin - however, that's currently not available.

Please list one service per answer (not multiple services in the same answer) so that the votes can decide on reliability (use comments for testimonies, if there are any ;-) ).

BTCrow.com, operator made quite a few posts about the service, Bitcoin Escrow Service - For safer bitcoin transactions

"Escrow For All" offers escrow services at quite low rates, we are using The armoury wallet, so your funds will never go missing. In addition, we can not scam you just by the simple fact of having clearnet address and e-mail address, so if we scam you, you can track us down by the IP. For more info visit: escrowonbtc.wordpress.com


Are generated public/private keypair the most random possible? The number of possible Bitcoin private/public keypair is very strong (2^160 which is 1,461501637×10⁴⁸).

However, if the random generator is not good enough, only a subset of all that "space" could be used which would considerably break the security of Bitcoin.

That kind of problem has already happened, like that Debian bug in the OpenSSL package.

How can we be sure that random generation is done so it could generated all private/public keypair from the possible "space" ?

The source code is open take a look for yourself. I am no expert on cryptography though so I will leave the explanation of this to someone who is. This is the file that you would want to look over https://github.com/bitcoin/bitcoin/blob/master/src/key.h

There is a dirt simple, decades old, extremely fast, random number generator that is around ten lines of C code that is extremely random. Orders of magnitude more random and faster than any of the "Numerical Recipes in C". The problem is the technology is export controlled, and thus can't be legally incorporated into an open source code base...


Can you specify Antminer overclock settings in bfgminer config file? I've just started upgrading my USB miners with Antminer U2's and so far everything is running well.  I am able to run all of my miners OC'd to 2.0GH/s with the following command:

bfgminer --set-device antminer:clock=x0981 -o POOL_URL -u POOL_USERNAME -p POOL_PASSWORD -S antminer:all

However I would like to know if it is possible to specify these overclock settings in a config file... I normally have a config file with various options set up that I load using bfgminer's -c flag.  I tried the obvious:

...
"shares" : "0",
"kernel-path" : "/usr/local/share/bfgminer",
"scan" : [
        "antminer:clock=x0781@/dev/ttyUSB0",
        "antminer:clock=x0781@/dev/ttyUSB1",
        "antminer:clock=x0781@/dev/ttyUSB2",
        "antminer:clock=x0781@/dev/ttyUSB3",
        "antminer:clock=x0781@/dev/ttyUSB4"
]
}

but unfortunately that didn't work.  Also my attempts at googling
I found plenty of examples of people setting overclocking using the command line (or batch files) but none using a config file.

Try:

"scan" : [
        "antminer:clock=x0781"
]

Couldn't you specify your clock rates with your launching params (your first code fragment) and then when you have BFG running, just save your current settings (Press [S] then [W]) and it'll launch just the same next time?

Not sure if I'm understanding your question correctly.


What effects would a scalable Quantum Computer have on Bitcoin? A scalable quantum computer is a quantum computer that is easy to extend - adding more (q)bits of memory is not a fundamentally hard problem, and will happen. Or, alternatively, that it follows Moore's Law - its memory capacity and speed will increase exponentially over the years with technological advancement (the exponent might be relatively low).

Suppose such a Quantum Computer were constructed tomorrow - what would this mean for bitcoin?

You have a good discussion in:

https://bitcointalk.org/index.php?topic=133425.0

Basically, ECDSA is compromised, hashing isn't. With a quantum computer, you could easily deduce the private key corresponding to a public key. If you only have an address, which is a hashed public key, the private key is safe. Anyway, to spend a transaction, you need to send the public key. At that point you are vulnerable, but the attack is not straightforward.

In general, quantum computers are not exponentially better than classical computers. You cannot access all the states in the superposition, only global properties. You can read http://www.cs.virginia.edu/~robins/The_Limits_of_Quantum_Computers.pdf to get a good idea of what they can and cannot do.

Quantum computers can do hashing (cf. Quantum Error Correction).

Quantum teleportation will revolutionize the distribution of the blockchain.


When should I use -reindex-chainstate and when -reindex What is the difference between the options -reindex and -reindex-chainstate?

Is one of the options faster?

When should each option be used?

-reindex:

wipes the chainstate (the UTXO set)
wipes the block index (the database with information about which block is where on disk)
rebuilds the block index (by going over all blk*.dat files, and finding things in it that look like blocks)
rebuilds the chainstate (redoing all validation for blocks) based on the blocks now in the index

-reindex-chainstate:

wipes the chainstate
rebuilds the chainstate using the blocks in the index you had before

The latter should be strictly faster, as it does not need to rebuild the block index first. Perhaps the progress bar during reindex confuses you: that progress is only for the rebuilding of the index. The recreation of the chainstate happens after that rebuild is completed.

You should use -reindex only when you were running in pruning mode, or if you suspect the blocks on disk are actually corrupted. Otherwise, when you only suspect corruption of the chainstate (which is far more likely), use -reindex-chainstate.

if you using reindex-chainstate is more faster .
also i have collection script to monitor block status
block monitor example script

you can ruuning with crontab and see how many block have been sync and compare with mainnet block excplorer.


How do SPV (simple payment verification) wallets learn about incoming transactions? I try to understand a SPV implementation.

I read the wiki pages on Protocol Specification and Thin Client Security as well as the white-paper's chapter 8 .

What I don't understand:
Assume user A has Bitcoin address X.
User A can do getheaders and load all block headers and then have all block hashes and timestamps.

So: how does a SPV client then find possible transactions to the user's Bitcoin address X without loading all blocks (and all transactions)?

You are right that SPV as described in the Bitcoin paper does not explain how to discover payments to yourself, without downloading full blocks. My guess is that Satoshi either planned to develop this later, or that he assumed you'd just be told about payments to yourself (pay-to-IP, as existed next to pay-to-pubkeyhash as is used now).

Practical implementations of SPV nodes today however use a protocol extension called bloom filters, described in BIP 37. They use getheaders to fetch block information prior to their wallet's birth timestamp, and request filtered blocks afterwards. To do so, they submit a bloom filter that describes the addresses and transactions they are interested in to the peer. The peer then only includes the relevant transactions in blocks it submits, together with their Merkle paths to prove that these transactions were indeed part of said block.

I think SPV is only meant to verify transactions, not calculate a balance or list of all transactions to a certain address.


What's a Sybil attack? Can anyone please provide a clear definition for what a Sybil attack is?
I was asked how the cryptocurrency I am developing would prevent Sybil attacks.

A Sybil attack is an attack where a single adversary is controlling multiple nodes on a network. It is unknown to the network that the nodes are controlled by the same adversarial entity. For example, an adversary can spawn up multiple computers, virtual machines, and IP addresses. They can create multiple accounts with different usernames and e-mail addresses and pretend that they all exist in different countries.

Avoiding Sybil attacks is a difficult problem. In centralized systems they are typically avoided through heuristics that do not provide cryptographic assurance of Sybil resilience. For example, a centralized entity may try to avoid Sybil attacks by requiring that an individual IP cannot create more than a specific number of user accounts in a given time interval.

Sybil attacks are avoided in Bitcoin by requiring block generation ability to be proportional to computational power available through the proof-of-work mechanism. That way, an adversary is limited in how many blocks they can produce. This provides strong cryptographic guarantees of Sybil resilience.

Please see Ethereum EIP 819 (https://github.com/ethereum/EIPs/pull/918) which researched the first sybil-attack-resistant design for an ERC20 Ethereum Token.  This design achieves sybil attack resistance by using Proof Of Work to ensure that neither the deployer nor any other entity is unfairly receiving massive amounts of tokens for free during the distribution.  Not other distribution scheme (airdrop, ico) can prevent that.


Can a blockchain be created that forgets transactions whose outputs have been spent? Is it possible for a blockchain based currency to say, after all outputs have been spent from a transaction to "delete" it from the blockchain, or at least require the nodes not to download it, what methods are there for achieving such a goal ?

The problem I see with pruning is that you still have to first download the entire blockchain from a node and then prune it. I am looking for a method which doesn't require the whole chain ever to be downloaded.

This is not possible with current blocks and transactions, although future improvements may allow us to prune some space from future blocks and transactions.

Let's think through the idea of deleting a transaction for a moment.  Let's say we have two particular transaction in the blockchain:

  Alice mines 50 bitcoins
  Alice pays Bob 50 bitcoins

Now we delete Alice's coinbase (mining) transaction:

  [PURGED]
  Alice pays Bob 50 bitcoins

Wow!  That looks like 50 bitcoins appeared out of nowhere!

What if that transaction has lots of proof of work?

Could you trust the Alice-pays-Bob transaction if it had 50,000 confirmations even though you can't see where those bitcoins came from?  Sure, that like that might be a reasonable trade off of reduced security for increased convenience.

But in order to validate future transactions, nodes don't just need to know who has bitcoins—they also need to know who doesn't have bitcoins.  For example, imagine Bob hasn't spent his 50 bitcoins, so that transaction should be part of the blockchain; yet, when you download the blockchain from Mallory's node, this is what you get:

  [PURGED]
  [PURGED]

At some point in the future, Bob goes to spend his 50 bitcoins.  Other nodes who didn't sync from Mallory know Bob has 50 bitcoins, so they accept blocks with that transaction. Your node rejects blocks with that transaction because it doesn't think Bob has 50 bitcoins, permanently forking you off of the consensus blockchain.  This is called consensus failure and it's one of the things we try really hard to avoid in Bitcoin.

Why not just keep track of amounts and purge the rest?

One way around this dilemma would be if we could split transactions into different parts:

The parts we needed to build the Unspent Transaction Output (UTXO) set that full nodes use to prove whether or not Bob has 50 bitcoins.
Everything else, such as the large public keys and signatures we use to prove Alice was authorized to spend those 50 bitcoins.

Here we encounter an additional problem with transaction pruning, a limitation of the way Nakamoto designed Transaction Identifiers (txids).  Nakamoto's design simply hashes the entire transaction and uses that to form the leaf nodes of the merkle tree whose root node gets included in the block header and secured with proof of work.

(Image from 21.co, CC-By-SA license)

Because of this design, in order to verify the UTXO-required data, you also need to download the entire transaction, including its public keys and signatures which constitute about 1/3 to 2/3 of a transaction.

This makes Nakamoto's whitepaper-style pruning in Bitcoin right now pretty much impossible.  Happily, some smart people have been working on improving the situation.

Segregated Witness

...which sounds like some weird law-enforcement term...

Blockstream's testnet sidechain, Elements Alpha, includes a nifty feature called segregated witness.  First, some background on witnesses in cryptography:

A witness is the data needed to prove some other data's validity.  This probably derives from contract law, where you often get other people to witness your signature on important documents.  In the case of Bitcoin, the witness to a particular spend being valid is the scriptPubKey of the output being spent and scriptSig of the input that references it in the spending transaction.

In Elements Alpha and the new Liquid mainnet Sidechain, the witness is "segregated" into a different part of the block and is not covered by the txid hash.  That means that nodes who want to reduce their download requirements can skip downloading witnesses for transactions with more than (say) 50,000 confirmations. However, now they can still use the block header merkle root to verify that all of the non-witness data (including the amounts transferred) are correct, and use that to build a correct UTXO set.

I can't find a source right now, but I think I've heard Wuille and Maxwell say that for typical Bitcoin mainnet transactions, this would mean about 1/3 of the transaction data doesn't have to be downloaded by nodes that don't want to validate old signatures.  On Elements Alpha where the witness is larger for transactions that use value blinding, this would mean 2/3 of the data doesn't have to be downloaded.

As a bonus, segregated witness also "completely eliminates all known forms of transaction malleability" (Wuille's description).

When will this appear in Bitcoin?

You're in luck: just a few days ago, Luke Dashjr presented an idea for how segregated witness can be soft forked onto Bitcoin mainnet.  (Previously, it had been thought that a hard fork would be necessary.)

The payer pays to a scriptPubKey that always returns true but which contains the hash of a redeem script like P2SH does:

<hash_of_redeem_script> OP_TRUE

(I just made that up; I don't know what the real construction will look like.)

When the person paid later goes to spend, they provide an empty scriptSig in the transaction itself.  This is valid to old nodes, but upgraded nodes know to look somewhere else in the block for the actual scriptSig.  The witness has been segregated.

For both old nodes and new nodes, they calculate the txid using the empty scriptSig, so the data covered by the merkle root still covers the important value amounts and references.

I don't know exactly how well this compares to the segregated witness in Elements Alpha (does that cover the scriptPubKey as well?), but it does most of the work in a convenient soft forkable construction.

Since this is week-old engineering, it may change a lot or even be found to be unworkable in the coming months, so don't expect to see it in the immediate future—but, long term, do expect to start seeing some new pre-download pruning options appear.

Yes, this should be possible. But there is no support for this in bitcoind yet.

Basically, you can run bitcoind with -prune option. In that case it will delete the older blocks and keep only the unspent outputs(which are required for newer tx validation). So theoretically, you can just copy utxo database from an existing node and start downloading from the current block.

Right now there is no decentralized way to build the utxo database, you just have to start downloading from block 0 and build it yourselves. You could for example torrent the whole UTXO DB. I was thinking of a way to relay the UTXO set (like blocks) , but it would be very big (around 1.2GB right now). I am not knowledgeable enough to know how exactly could such a thing be implemented but it looks theoretically plausible to me.


How do I export my private key on MultiBit I am using Multbit on my desktop, and I want to use my wallet on a another device like my phone.

MultiBit does not have the same dump private key options as the normal bitcoin qt. Your best bet if you want to move coins is to load your wallet of choice onto the new device, then send to that address from your MultiBit wallet. Multibit stores private keys as described here
https://multibit.org/en/help/v0.5/help_walletBackups.html
https://multibit.org/en/help/v0.5/help_fileDescriptions.html

Tools--Export Private Keys,you can get a yourwallet.key.Than open it by using text editor,you can see the private keys plaintext.


If someone bought an old computer and found Bitcoins in it, could they use it (legally)? Let's say someone bought a used computers which has a copy of a bunch of Bitcoin keypairs. Is he legally allowed to transfer them?

Is this case analogous to finding a pile of cash inside a used bag?

This is going to depend a lot on many surrounding facts. Including where this happens. How you acquired the computer and whether you know who the owner is.

I'm most familiar with the law in Australia (Victoria) where stealing is defined as follows: "A person steals if he dishonestly appropriates property belonging to another with the intention of permanently depriving the other of it." I imagine many common law countries have relatively similar definitions (with important differences for edge cases, of which this is one).

If you see bitcoins as property then your example involves theft. I think most jurisdictions will define bitcoins as a form of property, if they don't there would be all sorts of tax issues. This would be the case in Australia and it would be theft.

To me I don't think this is analogous to finding a pile of cash inside a used bag. I think it is closer to find someone's internet banking username and password inside a bag you purchased. Bitcoins are not physical and the private keys (which is what you would find) merely grant you access to them. Most people would agree that doing anything with the internet banking details would be dishonest.

The difference in my example would be whether destroying the keys would be a crime. It is unlikely to be a problem with internet banking details as there is no expectation this would permanently deprive the person of their property. With bitcoin you don't know if there is a backup so you would at least be recklessly dealing with someone's property.

Since Bitcoin deals in skirting tax laws and is primarily used by shady types I see no reason why anyone would not just claim the bitcoins, after all most governments, corporations and stock market gurus have at one time or another been corrupt or dealt with insider and information.


Why mining pool has different connections ports for different difficulty In the documentation of mining pool I found following

Connect Details:

(Difficulty 5 - GPU)    stratum+tcp://stratum.btcprivate.org:3032

(Difficulty 10 - GPU Farm)  stratum+tcp://stratum.btcprivate.org:3036

(Difficulty 15 - Nicehash)  stratum+tcp://stratum.btcprivate.org:3096

I see that only differents between difficulty. I have a farm of 6 card which connection should I use and why?

Any ideas? Thanks!

I feel sorry for you that no one had replied, so i'm gonna join in and try to think together with you, cause i was wondering the same.
Out of pure guessing, i think that when you have a mining farm, you mine a block very fast.
When you are finished with the block, the server needs to affirm it and send you a new job, which makes a small delay. This delay can decrease the profits over time.
Now the next question is, why isn't everyone using the highest difficulty? I'm not so sure about this, but i believe it has something to do with having to finish a block before you log off or your software crashes. I don't know what happens to a block that gets half mined. I think the block has to be mined in a whole for it to be confirmed.
When you mine with low difficulty, the block is split in pieces so everyone has a part they can complete in a block.
Hope this helped. It's probably not the correct answer, but it sounds obvious.
This was my first post btw. lel hah, never sell, HODL!


Where is the real money stocked? Are exchanges banks? I'm trying to understand how cryptocurrency works, and there is something I really don't get:

Exchanges; some are calling themselves "cloud banks" but I thought there was no banks, no place to stock the money, nothing was centralised. how do they do? Where are the dollars going/stocked?

The first thing you need to understand is that cryptocurrencies like bitcoin are the real money.  They are not merely a measure of government fiat currency denoted in a different unit.  With that in mind, your question doesn't make a lot of sense.  It's like asking where the real money is stored when you purchase gold.  The gold is the value.  You have simply traded some other currency in exchange for it.

Exchanges, web wallets, and other "cloud banks" (although I've never seen this term) are just services that store your bitcoin for you.  They manage your transactions, and often your private keys, so that you don't have to run software on a computer to do so.  If you have given them US dollars, what you have done is purchased bitcoin with those dollars.  This is just like purchasing a bag of groceries with your USD.  Someone isn't storing the money you spent as a backing for the value of your bag of groceries in your pantry.  You've simply exchanged one thing for another.

I would add that there isn't a "where". Cryptocurrency isn't printed, nor does it ever exist in a physical location. There are only verified, recorded transactions between users/peers.


What are Forward Blocks? Mark Friedenbach says "Bitcoin’s Block Size Can Be Increased Without Hard Fork".

Can someone ELI5 what are Forward Blocks?

From this week's Bitcoin Optech

  One well-known method for soft forking an increase in the Bitcoin
  block size is extension blocks—a data structure that’s invisible to
  nodes that haven’t upgraded to the soft fork and so is not subject to
  their historic limits on block size. By itself, this is an undesirable
  method for increasing block size because preventing old nodes from
  seeing the transactions in the extension block also prevents them from
  being able to enforce any other consensus rules on those
  transactions—such as rules that prevent a malicious user from spending
  other users’ bitcoins or from creating more bitcoins than allowed by
  the 21 million bitcoin subsidy schedule.

  However, one doesn’t need to increase block size to increase the
  amount of data that can be added to the block chain per minute—it’s
  also possible to increase capacity by increasing the frequency of
  blocks (reducing the average time between blocks). A method for gaming
  Bitcoin’s difficulty adjustment algorithm—called a time-warp attack—is
  well-known among experts and has been used successfully in
  demonstration attacks against Bitcoin’s testnet and real attacks
  against altcoins. (Note: although Bitcoin is technically vulnerable to
  this attack, it’d be a slow attack that would give the userbase a
  significant amount of time to respond.) By itself, increasing block
  frequency is also an undesirable method for increasing capacity
  because shorter block intervals increase the effectiveness of miners
  with large amounts of hashrate and so is likely to increase mining
  centralization.1

  Perhaps disproving the saying that “two wrongs don’t make a right,”
  this talk describes a novel way of combining extension blocks and the
  time-warp attack to allow both upgraded nodes and old nodes to gain
  the same capacity increase and see all the same transactions for
  validation while simultaneously slightly reducing mining
  centralization risk. Upgraded nodes would validate one or more
  extension blocks (called “forward blocks”) that provide additional
  block space with a centralization-reducing 15 minute average interval,
  but the upgraded nodes would also restrict the time stamps in legacy
  blocks to ensure a permanent (but limited) time warp attack increased
  the frequency of legacy blocks enough to allow them to include the
  same transactions that previously appeared in the forward blocks.

Video / Transcript / Paper

Apparently, Mark Freidenbach refers to this work on Freicoin as the origins of ‘forward blocks’.

https://freicoinalliance.com/topic/638-changing-the-proof-of-work-algorithm/


Found my old wallet, is it empty? So I found my old wallet from 2011, I was able to pull my address and my PrivateKey using  pywallet. I downloaded Bitcoin-QT, copied the old wallet over and reran with -scan. Since it was a new install the blockchain is still updating (not finished as of this post).

I searched my address at blockchain.info and it said that address didn't have a balance. With that being said, are my efforts at recovering the wallet pointless? I pulled the wallet off an old drive so it hasn't connected since 6/2011. The entire directory is intact and the block that was processed is still in the directory as well, about 301MB big. Not sure if that helps me at all in this case.

EDIT: Here'e the pywallet dump with critical data removed. The fact that there is nothing under tx makes me believe that I'm wasting my time.

{
"bestblock": "REDACTED",
"ckey": [],
"defaultkey": "1PSatNhRDmmR6rfK5c9XJvqwB92z7beRa",
"keys": [
    {
        "addr": "1PSatNhRDmmR6rfK5c9XJvqwB92z7beRa",
        "compressed": false,
        "hexsec": "REDACTED",
        "label": "",
        "private": "REDACTED",
        "pubkey": "REDACTED",
        "reserve": 0,
        "sec": "REDACTED",
        "secret": "REDACTED"
    }
],
"mkey": {},
"names": {
    "1PSatNhRDmmR6rfK5c9XJvqwB92z7beRa": ""
},
"pool": [],
"settings": {
    "addrProxy": "127.0.0.1:23075",
    "fGenerateBitcoins": "False",
    "fUseProxy": "False"
},
"tx": [],
"version": 32100
}

It's worth keeping in mind that your "wallet" doesn't actually contain any bitcoins. What your wallet contains is the private keys that permit you to spend coins that have been sent to any of your addresses. Which addresses have been sent coins is a matter of public record (the blockchain).

If you had previously received (or mined) coins using one or more of your addresses that are contained in that wallet, then the record of those transactions will still exist. Note that your wallet likely contains more than one address, particularly if you've used it for anything at all. The address you have shown in your question has not received any coins.

If you have copied your old wallet.dat file into a new Bitcoin client, the first thing to do would be wait for the blockchain download to complete. Your client won't know about any coins that have been sent to the addresses in your wallet without actually seeing the whole blockchain.

Keep downloading for sure
If you were given the address when you began to mine and then you weren’t online to receive the bitcoin then you sync that address at least up to the date the bitcoin were sent to you in order to show a balance
Also, import the private key into a wallet and then click on receive more addresses or something like that and it will give you more addresses from that wallet
I could be wrong but I’m pretty sure that’s what I remember


Is Bitcoin Cash the same as Bitcoin classic? Sorry for the dumb question.

I am confused to the status of Bitcoin classic. There is a lot of support for Cash on the Classic website which leads me to think they are the same. Also I see more news for Cash than for Classic. Also, was it not true the currency acronym 'BCC' was reserved for Classic? Now I see its used for Bitcoin Cash.

What is the difference between Cash and Classic forks?

Bitcoin Cash is an altcoin, i.e. a Bitcoin-like protocol and network that originated from hardforking Bitcoin chainstate. Bitcoin Classic was first a hardfork proposal and then an alternative implementation of first the Bitcoin protocol, then the Bitcoin Cash protocol.

Originally, Bitcoin Classic was a hardfork proposal that advocated for a blocksize increase to be activated with 75% hashrate support. To that end, the Bitcoin Classic repository maintained only the set of changes necessary to introduce said blocksize increase, rebasing this on top of the latest changes of the Bitcoin Core repository. When it became obvious that there was too little support for Classic, the Classic repository started to fall behind, work subsequently being discontinued.

Later, the Bitcoin Classic repository was revived by a developer as an alternative implementation of the Bitcoin protocol. They introduced a number of other changes into this repository instead of only maintaining the code for the blocksize increase. For a while, Bitcoin Classic cooperated with Bitcoin Unlimited, e.g. with both implementations rolling out support for thin blocks. Later, Bitcoin Classic maintained an alternative implementation of the Bitcoin Cash protocol. It was recently discontinued altogether.

See Checking/polling a balance of an address in Electrum via the command line/RPC

Bitcoin Cash is essentially a clone of the existing Bitcoin blockchain with one important feature: additional block size capacity. Those who owned Bitcoin before the split now own an equal amount of Bitcoin Cash, meaning Bitcoin Cash and Bitcoin each now have 16.5 million units in circulation. Multiply Bitcoin Cash’s recent price of $607 times 16.5 million units, and you arrive at a market cap of $10.8 billion, making it the third-most valuable cryptocurrency at around 16% of Bitcoin’s $69 billion market value.

There is one other HUGE difference - it has no platform of use or distribution - meaning the webstores that take bitcoin - do not automatically take bitcoin cash - and the ATM network that sells bitcoin does not just automatically vend also bitcoin cash.

As to the " additional block size capacity " it is likely to work itself out in favor of Bitcoin itself via an upgrade to the Bitcoin network code.  see the article above

**** EDIT 9/3/2017 ****

There was a down vote because a reader did not understand the plain answer - which does answer the question.

The simple answer is NO for the reasons in the answer

Bitcoin is a very technical digital currency more people want to "buy" to invest in hopes it will increase rather than use it for an international cash currency it was written to be.  In that vein, most websites that accept "bitcoin" - do not interchange "bitcoin cash".  That is the real question being asked here in the end.

If a person buys something on our website in bitcoin, it will send a bitcoin address - not a bitcoin cash address

Bitcoin "classic" is the term defined at https://bitcoinclassic.com/ and it is in essence the original Bitcoin

Bitcoin and Bitcoin Cash are different - and yes "cash" is a fork of what one would know as the "Classic" form of Bitcoin.  Bitcoin Classic technically has features that fix Bitcoin issues right now - but it is STILL programatically "Bitcoin" - not "Bitcoin Cash"

Read https://bitcoinmagazine.com/articles/four-key-disagreements-between-bitcoin-classic-and-bitcoin-core-four-key-disagreements-between-bitcoin-classic-and-bitcoin-core-four-key-disagreements-between-bitcoin-classic-and-bitcoin-core-1457106744/

To downvote a correct answer encourages parties NOT to answer at all - after all I know the answer, and I do not believe I should be examined to explain it to someone in a way they want to hear it when I am not paid of this and the downvote simply means the reader does not understand the clear answer

**** EDIT 9/5/2017 ****

I am going to edit this one last time to re-iterate what the original question was.  I will state upfront I have no intention of downloading "Bitcoin Classic" as a piece of software to test and explore where or what I might run into as a bug.  For one it appears to require a full node server implementation  to do so.  The daemon we use right now has gone through many iterations of versions solving and squashing bugs that popped up here and there and no one in their right mind would look to something new and unproven to possibly complicate things that are working.

So no one should really care about Bitcoin Cash if they are using it as a currency - unless they are trying to buy something a low price in hopes it will outstrip Bitcoin in a race to a climb so they can sell it at a higher profit.

The view of Bitcoin should be as a currency - not an investment or technical argument - and recently governments have begun attacking it for being used as a method to raise capital.  Investors in their "greed" contribute to its volital price, and Bitcoin exchanges re-positioning themselves in a "stock market" look and feel - feed this "investment" mentality.

When it comes to legitimate businesses implementing ways to accept Bitcoin as a form of payment, there are only a few ways to do it.  All of them involve waiting on the transaction to clear - so a retail store is not good option unless one is willing to take a risk on a loss or make the customer to wait on a a confirmed transaction.

All of them involve that one put up a full server and invite every hacker to attack you, go with a thin client like Electrum as I showed here => Thin command line-capable client for Linux which requires some programming skills and a Webstore and Linux type server to have root access to Linux features for, or the most developed commercial solution with the most options out there that ties one to an onerous solution use - https://bitpay.com.

None of these are Bitcoin Cash or Bitcoin Classic solutions

Looking at the tar file for linux for Bitcoin Classic - there is quite a bit of work to set it up and guess work too according to https://bitcoinclassic.com/linuxbuilds.html .  To be blunt, many commercial websites are running CentOS7 which is a flavor of Red Hat and they are looking to use "yum" via RPM files to keep their systems up to date automatically and "sane" with proper dependencies, and "Bitcoin Classic" has no RPM version at all.  I digress - because a technical discussion has no value if the product in this case "Bitcoin Classic" and "Bitcoin Cash" have no viable commercial platform it would be used on as a payment acceptance method in a webstore.

Do not get me wrong - https://bitpay.com - has the most open source solutions collected in one place, but using it also means paying their fee structure and especially if using their "Bitpay" VISA card.  It is 1% versus the 3% that a bankcard charges.  Bitpay - has a user agreement that translates a Bitcoin transaction basically back into a non-permanent credit card type transaction and has a focus on using Bitcoin as an actual payment solution like VISA and Mastercard; and on our website there is a Bitcoin payment method one can select instead of the bankcard route.  If you use any of Bitpay's solution software for your webstore / webcart  - you must buy into the whole thing as they have implemented it.  They will serve you a Request address to send to.

You will NOT find any mention of Bitcoin Cash or Bitcoin Classic at https://Bitpay.com at all because they are actually oxymorons to the Bitcoin issue of using Bitcoin as a cash equivalent currency.  You need to send it - it needs to arrive as a permanent payment- and the seller then makes the risky decision to immediately convert it to local currency - or not.

Bitcoin classic states on their website " Bitcoin Classic stands for the original Bitcoin as Satoshi described it, "A Peer-to-Peer Electronic Cash System". "; and that is how I defined it to answer the question - with the reality that the other side of the question is HOW businesses can accept it as such and how it has also been polluted by commercial efforts to offer "Bitcoin" and protect themselves from potential fraud and customer complaints when they are providing the tools for businesses to use it defraud customers potentially.

In January of 2016 this article was written, and it is still true today => https://www.washingtonpost.com/news/innovations/wp/2016/01/19/r-i-p-bitcoin-its-time-to-move-on/?utm_term=.3781ce190f21 as the technical argument about ALL digital currencies range on - and "Bitcoin Classic" while touting it is 100% compatible with "simple" Bitcoin is no different.

So if someone wants to engage in a technical discussion about the idiosyncrasies of something that illustrates how pollution in the air is why all of those suffer if forced to breath it - that is obvious and you can count me out.

Bitcoin is a self minting currency and that is not really a good thing, as more persons get interested in it.  China recently put the brakes on using Bitcoin to raise money for business efforts - because after all Bitcoin is flooding in there; see => https://www.cnbc.com/2017/09/05/bitcoin-dips-another-200-after-chinas-cryptocurrency-crackdown.html and the reasons should be obvious with about 70 percent of the Bitcoin miners located in China.  That self minting money is making a lot of miners over there fairly wealthy processing Bitcoin transactions.  They do not CARE what transaction they process Bitcoin Cash, Bitcoin or Bitcoin Classic - they are going to get paid no matter what.  See https://www.buybitcoinworldwide.com/mining/china/

The curious thing is much of the world is not looking at "where" the processing power behind Bitcoin - of any type - is located.

So the answer to the question is what I addressed - Bitcoin Classic is for all intents and purposes the same as "Bitcoin" - with the exception that it is relatively new and technically not supported well but with features supposed to solve issues that Bitcoin has right now; and I would never trust my business to Bitcoin Classic - especially right now - because it may also harbor bugs and other issues - in addition to the fact that it is just not supported out there yet - and certainly is no drop in replacement for what we use right now.  Bitcoin Cash is a fork and we are not even "looking" at looking to support it.

The answer remains is no they are not the same and Bitcoin Cash - yes - is a fork or Bitcoin - it matters not whether you call it Classic or Original


What happens if your bitcoin client generates an address identical to another person's? Here's a what-if scenario:

Person A has a Bitcoin address with 25BTC.
Person B opens up their Bitcoin client:

which may or may not have the complete blockchain (the latter would
mean no copies of Person A's transactions)

Person B presses "New Address", and Person A's address happens to somehow be generated. Now, the blockchain finishes synchronizing.

What happens? Is this a possibilty, sans the astonishing improbability? After all, random number generation can be influenced.

If this happens, then Person B will be able to spend person A's bitcoins. However, there are only two ways this can happen:

a) Person B generates the same keypair (private key) as person A

or b) Person B generates a different keypair, which (public key) hashes to person A's address (a hash collision)

Take a look at the specification for at bitcoin address: https://en.bitcoin.it/wiki/Technical_background_of_Bitcoin_addresses

  A Bitcoin address is a 160-bit hash of the public portion of a
  public/private ECDSA keypair

For "a" to happen, person B would need to break "secp256k1".
I am no expert on this field, but from what I can find on bitcointalk.org, then the "strength" of this is 2^128 bits. And if you're wondering how strong that is, then look for the video "Exhaustive search attacks" from Dan Boneh. 11 minutes in the video he says "anything that's bigger than 2^90 is considered sufficiently secure" (its about attacking 3DES, which is a symmetric block cipher so I'm not sure it actually apply to secp256k1, but I really have no better argument for why 2^128 is "so secure that you won't never, ever, ever generate the same key as someone else"

And for "b" to happen, you would need to find a collision on RIPEMD-160(SHA-256(pk)). As far as I know, then neither RIPEMD-160 nor SHA-256 is known to have any vulnerabilities to hash collision attacks. So somehow breaking both or randomly generation a key which hashes is exactly the same as another bitcoin address, is highly unlikely.

There is also a chance for you computer to catch on fire, and some of the materials to melt together into a lotto coupon with winning numbers on (and a valid barcode), but it just won't happen because of the chance is so unbelievably small (it's the same with the "click and generate another persons bitcoin address").

EDIT Woops, one important thing: This all assumes that all bitcoin addresses are properly generated using "true random". All brain-addresses and addresses generated using a bad PRG, might be easy to find by either using a flaw in the PRG or exploit the (flaws in the) human brain.

Funny how people claiming to know about crypto can't calculate probabilities.

The address space of 2128 is not the probability or "strength" of anything (other than the probability of picking a value in the address space).

The probability of 2 people having the same bitcoin address is actually a lot higher than people may suspect by (faulty) intuition.

In fact, the likelihood of collision is related to the Birthday Problem (read about it).

As the number of people and addresses generated increases, likelihood of a collision increases close to exponentially.

Given a few million users each generating a new address per month, the likelihood of a collision is such that it could occur several times in a lifetime, especially as we're dealing with hashes (or hashes of hashes).

Make it a billion users and you have regular stories of collisions appearing.


No bitcoins in my multibit wallet, but I have some when I look in the blockchain I got an old version of multibit (the one like in my picture)

It says I don't have any funds even when I reset my wallet (multiple times which takes about half an hour each time).

When I look at blockchain.info and search my wallet address it says I still have some bitcoin left.

I got a wallet.dat file somewhere but I don't know how to import it into the new multibit (multibit HD) since they require you to have some mnemonic or something. There is no simple open wallet button like in the old multibit.

What can I do?

I just deleted my original answer now because I realised it was wrong.

If you have a wallet.dat file, then multibit classic is not the Bitcoin wallet you would have used. Chances are, you used the original Bitcoin software.

First you will need Python 2.7:
64 bit version
https://www.python.org/ftp/python/2.7/python-2.7.amd64.msi

Download this private key extraction utility which will display the private keys for your wallet.dat

https://github.com/dlitz/pywallet

Download the zip and unzip.

Open the command line (windows key + r) type cmd then press enter. Change directory to the folder you downloaded ie:

cd c:\Downloads\pywallet-master

Or c:\users\mike\downloads\pywallet-master

then type:

python pywallet.py --dumpwallet

press enter and you should hopefully see a list of bitcoin addresses and private keys (which start with the number 5).

Once you have these private keys, open a wallet with blockchain.info

and once you're in, click on the Import/Export button and click 'Yes I know what I'm doing'.

Click on Import wallet in the left side column.

You can then add the private keys by copying and pasting the output from the command line.


Can bitcoins be "sold short"?  Or are there "put" options? Borrowing an asset and "selling it short" facilitates finding the appropriate price for the asset, allowing people to bet that the asset is overpriced (e.g. in a "bubble").  Can bitcoins be sold short?  Where and how?

Update (from Serith's answer): how about put options, which are similar?

Not only will Bitcoins soon be able to be sold short through several exchanges, but once that service is available, Bitcoin banks that pay interest will be possible.

A Bitcoin bank could pay interest on Bitcoin deposits by converting the Bitcoins into the least inflationary national currency available, investing those funds in loans or businesses, and using the profits to buy back more Bitcoins later to pay back depositors.

However, this plan has one flaw -- what if the price of Bitcoins goes way up, beyond the interest you can collect. You would then take a loss when you purchased back Bitcoins to pay back your depositors.

Normally, you would offset this risk by holding Bitcoins. But that would defeat the entire point of investing them. So you need some way to make money and risk money as if you were holding Bitcoins without actually holding any bitcoins. How can you do that?

And the answer is, you offset the risk that Bitcoins will go up in value by selling shorts. Selling shorts is like holding Bitcoins without having to actually hold them, allowing you to make money if they go up and lose money if they go down just like someone holding Bitcoins would. If Bitcoins go down, you lose on the shorts but make it up by making extra profits when you buy back Bitcoins to pay depositors. If Bitcoins go up, you lose when you buy back Bitcoins, but make it up on the shorts.

With the right combination of shorts, currencies, and investments, this should make the risk associated with interest-bearing bank accounts denominated in Bitcoins no greater than the risk with other currencies. (And if you sell the shorts directly to investors, you can make a profit on them as well, taking the commissions.)

It is entirely possible that this is part of the reason the exchanges are considering selling shorts. Not only would they pocket the commissions, but they could safely convert a fraction of the many, many Bitcoins they're holding into interest-bearing accounts denominated in national currencies, pocketing the interest.

Bitplex is an option exchange that offers put & call options on bitcoin.

https://bitplex.co


Does the software to conduct a 51% attack exist? I know that it would cost hundreds of millions of dollars to do a 51% attack on Bitcoin, but if somebody did that, bought the hardware, etc could Bitcoin Core or any other software be easily configured to do what they want (e.g, ignore blocks containing a certain transaction in order to try to get rid of it), or would such an attacker need to write their own software?

When you have open-source software, it's a fine line between "configuring" and "writing".

Say you want to reject all attempts to spend a particular transaction. There isn't a command-line option or config file directive to do this in the standard Bitcoin Core distribution, so in that sense the answer is "no". But you can do it by adding two obvious lines of source code and recompiling, which is only marginally work than modifying a config file.

There is certainly no need to rewrite Bitcoin Core from scratch, if that's what you're asking.  You can assume that if anyone is planning a 51% attack, the need to modify software is not going to be a significant obstacle.

I know that it would cost hundreds of millions of dollars to do a 51% attack on Bitcoin

wrong

  or would such an attacker need to write their own software?

no new software/hardware is needed.


How long should synchronizing your wallet for the first time take? What is the normal synchronzing time for your wallet when you first start? I am using 4G on a wireless and it seems to be taking forever to count down the number of blocks left until it is properly synchronized.

There are two factors to the time to catch up with the network:

The sheer size of the blockchain
The time to verify the blocks

As Tom mentioned the blockchain is currently about 7GB in size, so no matter what it'll take some time to download it. On the other side you have to verify each block, hence each transaction in the block, which requires random access to the blockchain downloaded so far. Depending on your setup the bandwidth may not be the main issue. Random lookups on spinning disks are not the fastest thing to do, and using an SSD might actually result in a speedup of the synchronization.

So don't worry if your bandwidth is not fully utilized, it just might be that the disk is the bottleneck (especially for later block >180'000 with lots of transactions in them).

You can use adsl to sync your client, and use the 4G connection later.

Or get the ~/.bitcoin/ folder from a sync client.


Wallet balance showing as unconfirmed - SOLVED! I'm using MultiBit and my wallet balance is showing as unconfirmed. The last transaction I made was a couple of months ago and seemed to be fine (https://blockchain.info/tx-index/25339607f1d5e3f36cd964554fd85c399c9359e58b169d6b7028b3627ef74f12).

When I try to make a payment with the unconfirmed funds I'm told "The error was insufficient money, missing XXX satoshis..."

I can see the correct balance in MultiBit but it is unconfirmed. The confirmed balance appears to be Zero. Any insight on what might have happened here or how I can fix it? I should say that I'm synced to the network and have 10 peers showing. Thanks for any help

My problem was easily solved, I simply had to Repair Wallet - an option in the Manage Wallet sidebar choice. All fixed!

Had the same problem. Bought bitcoins. After that I had to wait for enough confirmations, but I'm a newbie so I didn't know that.
The solution for me was to wait.


How does ScriptPubKey know the public key of an Bitcoin address? I am currently having a blonde moment.

The ScriptPubKey provides a hashed version of the receivers public key.

  scriptPubKey  OP_DUP OP_HASH160  OP_EQUALVERIFY
  OP_CHECKSIG

However, if I give someone my bitcoin address to send me money - how does the sender retrieve my public key and then hash it? As the pubKeyHash != my bitcoin address

I am probably forgetting something very obvious - but it has had my head bambuzzled this morning.

Addresses are really just shorthands for particular scripts. The standard address type (starting with a '1' on mainnet) does in fact correspond to the exact type of script you gave above.

If you base58 decode such an address, you end up with a byte string of the form 0x00 + [20-byte hash] + [4-byte checksum]. The corresponding script is OP_DUP OP_HASH160 [20-byte hash] OP_EQUALVERIFY OP_CHECKSIG.

So, in a way, your address does contain the public key's hash.

The sender does not need to know your public key, only the bitcoin address you provide which can be different each time. You use the public key later to redeem the funds and send to another address.


When I make a transaction, how is it broadcasted to other clients? It's a really nooby question, and with no doubt asked before, but if someone could tell me

a)how are other clients found

b)how is the information send to them

(please explain in a simple way, because I haven't messed with the bitcoin protocol itself)

They're found using a gossip protocol.
Transactions are sent using this structure: https://en.bitcoin.it/wiki/Transactions


A few security-related questions: how do I automate a web service as much as possible without storing private keys on server? I'm learning how to use bitcoind, and want to set up a side project that uses bitcoin to learn along the way. I'll be using the json-rpc with PHP on my server. I want to create a service that will receive bitcoins from users, and will eventually send those bitcoins either back to the users or to my own wallet.

In order to keep things secure, as soon as coins arrive at a user's unique address, I want to automatically forward them to another wallet that doesn't have the private keys on the server.

My questions are thus:

What's the easiest way to handle the bitcoins from an off-server wallet (on my computer or such), without doing absolutely everything by hand? Would it be possible to write a script that does everything I want it to do with the off-server coins, after prompting me for the private keys? For example, a database could hold all the bitcoin commands that would need to be run, but it would need by "OK" to run (requiring the keys). Would the keys be somehow visible if someone got access to the server?
If not the above method, how else can I automate the process as much as possible? The only thing I can think of currently is to do everything by hand: have a private wallet on my home computer, seeing what to do with bitcoins on various addresses, and manually sending them out using my home bitcoin client to the required addresses. This would be extremely tedious with a lot of users on the service. Surely there's a better, secure way?
I don't want to keep private keys on the server for two reasons: a) I don't know anything about server administrations or server security, as I'm just a developer, and b) as a result, I have a managed server (managed by the host), so they could get into the server at any time. I'm wondering, can anyone suggest how to get started in server administration and security so that I can take it into my own hands?

Thank you.

EDIT: To clarify, I mean handling transactions that are off of the server, not actually in "cold storage." The off-server wallet could be hosted on my personal computer--I just don't want it on the server, since it's more prone to attack.

Set up a cold storage machine, not connected to the internet but with boitcoin installed. Generate a bunch of addresses on the cold storage machine.

Using a USB drive, copy the addresses from the cold storage machine to the online system's database.  No need to do anything with the private keys.

When needed on the online system, just send to 1 of the addresses in the database.  This can be totally automated.  You don't need a private key to send to an address.


What is Ripple and how does it compare to Bitcoin? What is Ripple, and how does the system compare to Bitcoin?

This is answered in the official wiki:

  Like Bitcoin:

  ripple is a distributed peer-to-peer payment network
  ripple transactions are irreversible, sent over the Internet, and counterfeit proof
  ripple uses the same underlying cryptography as Bitcoin
  ripple has multi-signature support
  ripple has low to no transaction fees
  ripple servers can be run by anyone

  Unlike Bitcoin:

  ripple can send any currency
  ripple can automatically exchange currencies
  ripple transactions are fully confirmed in seconds
  ripple allows nicknames and gravatar icons for accounts
  ripple's reference client is a Firefox and Chrome add on
  ripple has no block chain download, clients are ready in seconds
  ripple has no mining or direct monetary reward for running a ripple server
  ripple has no currency risk as people can hold whatever fiat they want
  ripple solves the double spending problem with consensus instead of proof-of-work

There's nothing in common, essentially.
Ripple is a simulacrum of Bitcoin repeating some of its external features, adding naive stuff like gravatars and missing the basics: immutability, independence from human factor, and any appeal to general public which is needed for any social-engineering tool to take off.

https://medium.com/@Knowledger/the-blockchain-is-already-beautiful-please-dont-create-your-own-89b13dd35793#.trgkqp6lz


Why does only the earliest transaction matter for double spending? On page 2 of Bitcoin paper, it says:

  The problem of course is the payee can't verify that one of the owners
  did not  double-spend the coin. A common solution is to introduce a
  trusted central authority, or mint, that checks every transaction for
  double spending. After each transaction, the coin must be returned to
  the mint to issue a new coin,    and only coins issued directly from
  the mint are trusted not to be double-spent. The problem with this
  solution is that the fate of the entire money system depends on the
  company running the mint, with every transaction having to go through
  them, just like a bank.

  We need a way for the payee to know that the previous owners did not
  sign any earlier transactions.
  For our purposes, the earliest transaction is the one that counts, so we don't care about later attempts to double-spend. [emphasis added]
   The only way to confirm the absence of a transaction is to be aware
  of all transactions. In the mint based model, the mint was aware of
  all transactions and decided which arrived first. To accomplish this
  without a trusted party, transactions must be publicly announced [1],
  and we need a system for participants to agree on a single history of
  the order in which they were received. The payee needs proof that at
  the time of each transaction, the majority of nodes agreed it was the
  first received.

Why does only the earliest transaction matter for double spending?
I thought that it would be latest as previous owner would have checked till that. But even that is flawed... We need to check all.

Is it because the coin is a list of transactions and only first one is not verified?

"Doublespend" refers to an attempt of spending the same funds twice. In Bitcoin specifically this occurs when a user publishes two transactions that are in conflict due to attempting to use the same unspent transaction output as input. Obviously, only one of the two transactions can be valid.

Before Bitcoin was published, the solution to the doublespending problem was to designate a central actor that decided which of the two transactions would take precedence. The central actor would do this by announcing which of the two it had seen first.

The "first-seen" behavior was at first explicitly encoded in node behavior: nodes would not accept a conflicting transaction into their mempool (the temporary storage of unconfirmed transactions). However, this lead to the incorrect assumption that zero confirmation transactions could be reliable whereas actually the doublespending problem is solved by miners collecting transactions into blocks for confirmation. The blocks may only contain one of the two conflicting transactions, as otherwise the block is invalid. Thus, the blockchain specifies the precedence of transactions by converging on a common journal of the transactions without a central actor.

In the past months, we've seen the "first-seen" paradigm get softened significantly as doublespends (of unconfirmed transactions) have become more or less trivial due to the high demand for blockspace. As it is becoming common for users to update transactions with a higher fee (i.e. a doublespend), the "first seen" paradigm is falling out of use and being replaced by the defacto mechanism of "first-included". Assuming rational miner behavior selecting the most profitable transactions first, we will converge on a full replace-by-fee system eventually.

In other words, when the whitepaper describes the requirement for the Bitcoin system to create a convergent history with "first-seen", it describes a simplified situation that didn't account for the network dynamics of competition for blockspace. From today's perspective this should be understood as "first-confirmed".

Bitcoin is made with distributed computing and mathemetical calculations as the proof of concept.

so, every time you make a transaction, it is broadcasted to the network and processed based on the fees and resources available.

Bitcoin don't trust any one, so it generally approves transaction after at least 6 more blocks/transactions are added to ledger.

so, if you want to do double spending, you will have to forge the other transaction with exactly prior timestamp, and you must process next six blocks prior to the whole bitcoin network in the world. To do so, you must acquire at least 51% of computation power of whole bitcoin network, which is not possible.

so, bitcoin will discard any duplicate transaction based on the longest transaction block-chain length.


Can we get a fixed rate of kWH to USD through bitcoin? Assuming the energy to bitcoin rate of your choosing, what is the cost of one kiloWatt Hour, in USD?

Assuming the energy to bitcoin rate of your choosing

Market questions generally go out of date extremely quickly, and Bitcoin mining in general varies hugely in efficiency and availability of hardware. It is not as clear cut as working out the hardware level of efficiency at the chip level as this is only a small portion of the total power cost.

At a chip level, the hash engines have a specific cost per hash, minus any amount of failure rate, which is generally in the order of several percent of the work wasted.
At a miner level, where it converts incoming high voltage AC mains power to a lower voltage for use with the mining chips. This varies greatly with the design of the hardware being used, from tens of percent to just a few depending on the complexity and cost of the conversion.
At a farm level, where incoming transmission voltage is converted to mains voltage. This varies massively depending if the incoming supply is already designed for residential use (120v/240v), industrial use (277v/480v), or commercial distribution (tens or hundreds of kilovolts), and the efficiency of the hardware used.

It's therefor pretty hard to define even a cost per hashrate in the wider network, but once you know it it's relatively straightforward to convert it to a USD cost.

  what is the cost of one kiloWatt Hour, in USD

This is the simple bit. They're usually specified literally as this price, for example in parts of north america 4c/kWh is fairly typical, but it varies extremely widely betwene location and provider anywhere from 1c to 35c.

This question is a bit vague, however if you're interested in energy expenditure cost there are many good articles on the macro view of Bitcoin mining costs. I've linked one below that is quite comprehensive.

Digesting ‘Quantification of energy and carbon costs for mining cryptocurrencies’


Identify if miner is mining at all This is my first time to try to run bitcoin miner on my laptop (for testing), I used bfgminer and was able to run it however I'm not sure if its going anywhere:

 CPU 0:       |  1.27/ 1.28/ 0.00Mh/s | A:0 R:0+0(none) HW:0/none
 CPU 1:       |  1.16/ 1.27/ 0.00Mh/s | A:0 R:0+0(none) HW:0/none
 CPU 2:       |  0.94/ 1.18/ 0.00Mh/s | A:0 R:0+0(none) HW:0/none
 CPU 3:       |  1.16/ 1.20/ 0.00Mh/s | A:0 R:0+0(none) HW:0/none

What does this mean, my miner is not processing or mining as I can see its 0.00Mh/s?

If You are a beginner just starting you should probably go for GUIMINER or CGminer if you are planning on mining on your GPU if you are planning on mining on CPU you should probably go with pooler-cpuminer. BFGminer is meant for ASIC like USB Block erupters.

I HIGHLY ADVISE YOU AGAINST MINING ON YOUR LAPTOP AS THEY HAVE VERY BAD COOLING AND YOU CAN BURN YOUR MOTHERBOARD AND DESTROY IT IN MINUTES.


Has anyone gotten rich mining bitcoins? A number of questions on this site ask whether it's possible to make money mining bitcoins and the expected profits.  However, I'd like to know if there are real-life stories of people becoming wealthy solely from mining bitcoins.

It seems like mining bitcoins is, at best, a hobby that cannot make someone wealthy.

I suspect that it is hard to find real life stories because the miners would like to remain anonymous. If you had a few million dollars in largely untraceable BTC, would you want to publicize your story and make it easy for the government to tax you?

But there's some very strong evidence to indicate that "getting rich" was very possible. One story that comes to mind is "allinvain" who posted a reasonable amount of evidence that 25,000 BTC that he had mined was stolen from him. So, even though allinvain didn't "get rich" in this story, it certainly showed that a solo miner in 2011 could be making tens of thousands of BTC, easily worth millions of USD in 2013.

If you look at the blockchain it is easy to find addresses used by miners in 2010 that have thousands of bitcoins in them. Just find a block reward and trace where it went to. Here is one: 1AvLeBnWbiBeCNHwLGtWEK9GSVug3RWWxt It appears to be an address where the miner collected his block rewards over six weeks or so. (I'll substitute a blockchain.info link when it is back up.) Perhaps this private key was lost, so we can't say for sure. But it's reasonably to think that this one account (worth about $400,000) represents only a few weeks of work for this miner. If he kept all of the BTC he mined in 2010, he is likely a millionaire. At least on paper.

In short, since mining was much less difficult several years ago, and the exchange rate has gone up so much in that same time period, it seems very reasonable to assume at least some of the serious miners from those early days have made a considerable amount of profit.

Yes, there are. Yesterday there was a story in Dutch newspapers about a Norwegian student who bought bitcoins in 2009 for 18 Euro, he forgot it then and recently found out that his investment has accumulated to 615.000 Euro. With much effort he found back his password. He sold 20 percent of it and from that amount of real money, he bought an apartment in Oslo


What is the recommended lowest fee for a segwit transaction when sending coins from a bc1 address? What is the lowest fee for sending 1 btc from a segwit bc1 address?

1000 satoshi for 1000 bytes

sorry, your question has no sence. the fee depends on network utilization.


Is a distributed version of GLBSE possible? How would you design it? GLBSE is a privately owned bitcoin-based stock exchange website.

Recently there has been talk about creating a distributed, open source version of it, without any single point of failure, possibly utilizing blockchain/Namecoin technology.

Would such a project work, technically? How would you design it?

Step 1 - Representing shares in the company.

This is easy enough and has been discussed. The company sends a small amount of bitcoins to one of its addresses. It releases a digitally signed announcement that any bitcoins which can be traced back to this particular output are tokens representing shares in the company. When dividends are to be paid, they are sent (in normal bitcoins) to addresses which contain tokens in proportion to the amount. Initially the company is in ownership of its shares and can sell them to raise funds.

Step 2 - Enabling OTC trades.

Also easy. People who want to trade can broadcast their offers, perhaps on a dedicated Bitstock p2p network. People who want to execute standing orders can contact their issuers and together construct a Bitcoin transaction that sends X normal bitcoins from A to B and Y tokens from B to A, and both sign it. No trust is needed because the exchange happens simultaneously. There can be a Bitstock client that is a modified Bitcoin client, which is careful to distinguish tokens from normal BTC and can communicate with the Bitstock network.

Step 3 - Committing to offers.

Here's the hard part. With a normal OTC trade, there's nothing stopping a trader from backing out of an issued order if it becomes unprofitable by the time he is taken up on it. A market where orders needn't be honored will be inefficient and subject to manipulation. There needs to be some way to make committing orders.

One could conceive concocting some special Bitcoin transaction where the output can be claimed by reciprocating by sending tokens to a specified address, up to a given time. But I think this has too many moving parts to work. The Bitcoin script will need to verify that the tokens indeed originate in the company's address, and the completed transaction will expire if not included by some time - which is said to be impossible since it will be messed up in chain reorgs.

One way to do this is with a distributed trust model such as my own NodeBank proposal, where the bank nodes act as escrow for the trades.

If you want to do this completely trustless, I think you may have to create a separate Bitstock blockchain with its own rules (shared between all companies, but distinct from Bitcoin). I'm not sure it's possible to make a commitment mechanism for offering bitcoins for token bitstocks, so Bitstock will have to be its own currency which can also be used to create company tokens (just like Namecoin is a currency which can be used to create a DNS record). The Bitstock blockchain will have rapid blocks and a relatively strict timestamp requirement, and will be merge mined with Bitcoin. It will have a mechanism for making offers of Bitstock tokens vs. normal bitstocks, which is enforced by protocol if an execution request is made with its hash included in an early enough block. There should be a way to make special rules to make this survive reorgs - for example, orphan blocks will also be considered when evaluating whether an execution was given early enough, but a confirmation of this validity will also be included in the main branch, and require enough confirmations to make sure a validation can't be added retrospectively.

Step 4 - Continuous trade services.

No matter how clever we make the decentralized stock exchange, some things can still only be offered by a centralized service, in particular in regards to the speed with which orders can be placed, retracted and executed. A centralized service can be built on top of the p2p system to offer such features. It should enable depositing and withdrawing normal coins and token coins, and offer advanced features for trading deposited coins.

http://cassandra.apache.org/ this seems very well suited for a distributed p2p stock exchange.


Why do we need alternatives to Bitcoin? I don't understand why people need to create alternatives to Bitcoin such as litecoin. Why were these created? What's the point? You can't answer those questions using the same arguments for why Bitcoin was created.

In addition to Lohoris's answer, the reason that litecoin was created was to be as resistant to custom built hardware just for mining the coins, it uses scrypt as its cryptographic function. Scrypt was specifically designed to make it as expensive as possible to create hardware that is specifically good at doing that hash function. I personally like this because I do not like the idea of buying hardware that can only do SHA-256 to mine cryptocoins.

There is also ppcoin (pdf warning) which is aimed at not relying on constantly using electricity to keep the network secure. In this way it is very distinct from bitcoin.

This is the same reason Burger King exists when there is a Mcdonalds on every corner.


Query publicly available full nodes I don't want to run a full node yet, but I want to build an application. How and what do I use to query publicly available nodes? What nodes besides blockchain.info are publicly available for me to query over HTTP/HTTPS?

Depending on what you want to do there are several answers.

Top 2:

https://longhorn.bullpay.com - Up to 2,000 Tx's returned per call
https://live.blockcypher.com/btc/ - Up to 2,000 Tx's returned per call

These may work for you but have reduced thru put:

https://blockexplorer.com - Up to 50 Tx's returned per call
https://blockchain.info - Up to 50 Tx's returned per call

All these services act like a full node (at least bullpay and blockcypher have the ability to send transactions, i'm unsure about the other two in this regard). They all have free versions. Some have paid versions to increase the number of requests you can make per second for increased scalability. The links are to their explorers. API documentation can be found on each site.

So again, it depends on what you're trying to accomplish. If you're working heavily with historical data for things like auditing, you'll want to obtain more data faster. Focus on the first two. If you're just messing around then any of them would work with varying degree's of effort.

Then you can go for an api provider. There are plenty them are available out there. https://applikeysolutions.com/blog/10-best-blockchain-api-providers-for-developers


Where can the private key from a bitaddress.org paper wallet be redeemed? I recently got started by creating a single wallet using bitaddress.org. This contains the public bitcoin address and the private key in the wallet import format.

I now have some coins in there, but don't really understand how to use them.

How can I access/use my bitcoins? How is it possible to make a payment? What are the different options?

Any advice is greatly appreciated!

A paper wallet has a private key ("Redeem") and a Bitcoin address ("Load & Verify").

You can import the private key in the Bitcoin-Qt/bitcoind client using the Debug console or the command line API.
You can import the private key into Mt. Gox (Funding, then Redeem, Private key) and it will sweep the funds to your exchange E-Wallet account.
You can import the private key into Blockchain.info/wallet
You can import the private key from a mobile by scanning using EasyWallet.org
(fee applies)
You can import a private key into the Multibit client and possibly with other clients.
You can spend using a private key with Brainwallet.org <-- Be careful with this.

Bitaddress is a wallet that can be completely stored offline. That is its underlying importance. However, the printout is very misleading and confusing when it tells you that you can check the balance at blockchain.info.

I sent money to bitaddress.org thinking that I would immediately be able view that it was sent. Wrong. The Private Address must be imported to your blockchain account first under settings, and the addresses. That is the Key. Very simple but it took me quite awhile to figure this one out.


Probability of Finding a Block I've been using cryptocurrency revenue calculators and have appeared to figure out that for all of the major algorithms, the probability of a hash being valid is 1/(D*2^u) where u is either 0, 13 (weird), or 32 and D is the network difficulty. I used the formula (my_hashrateblock_rewardtime) * 1/D * 1/2^u to find revenue. I believe the following is true:

u = 32 for SHA-256, Scrypt, X11, Groestl, X11Ghost, Lyra2Rev2, NeoScrypt, Blake (14r)
u = 13 for Equihash
u = 0 for CryptoNight, Ethash

Can someone explain this phenomenon? Will the constant part of the probability change over time or will the difficulty adjust?

To look at it a different way, the probability for solving a block in Bitcoin is approximately:

1 / ({total network hash per second} x {average block time in seconds})

Note that block time is the average.

As of writing, this is:

Probability = 1 / (24,667,167,000,000,000 x 600)
= 1 / 1.48003002×10¹⁹
= 6.75661970694351186200939356621969059789746697164966964... × 10^-20 (WolframAlpha)

Data source: blockchain.info


International shipping times for Butterfly Labs ASIC hardware The Butterfly Labs FAQ says they use USPS for shipping (except for Mini Rigs), and displays the options "Standard" and "Express" during the checkout process:

However, the USPS website appears to offer "Express" shipping (1-3 business days) and "Priority" (6-10 business days) for international shipping.

I'm sure people out there have received FPGA devices internationally from BFL in the past, probably with the same international shipping options. Can anyone confirm that delivery times of BFL hardware are equivalent to the two options I found on the USPS website?

I am in London, United Kingdom. I selected the standard shipping option, which came to $38.00 (hardware was $149.00). I made my order back in April 2013, and they shipped in October 2013. ButterflyLabs used USPS (United States Postal Service) shipping option. I could track the order via the USPS site, although it says it got to the UK, and then was held - for about a month (presume they were working out import tax on the product) and then returned to Butterfly Labs, without informing me. Butterfly labs are now ignoring any communication from me, as I  try and resolve the issue.

My advise would be to look for another option, as the issue appears to be with USPS, and if you get any issues Butterfly Labs will blank you, as they already have your money, and there is not much you can do about it.

there is no confirmation to this yet. at the time i was placing an order for a BF box, the prices where 50% lower and the standard shipping was about or less than 25$.

since the orders of that time haven't been even shipped yet, orders nowdays like yours are also not shipped and thus no user can confirm the shipping times. only someone from BF staff but one cannot believe their statements.