In overview, what is "Bitcoin Cash" and the hard fork on August 1st 2017? In overview, what is Bitcoin Cash? How is it different from legacy bitcoin? What is the blockchain hard fork which was supposed to happen on August 1st, 2017? Who benefits from the fork?  Who is disadvantaged?  Why is Bitcoin Cash important? Why is the fork event important?  Is this related to Segmented Witness (SegWit) and the debate on block size?

How will I know that the fork actually happened?

I am seeing questions and answers that assume this knowledge, but I don't see a good overview explanation here. I think bitcoin.stackexchange.com will benefit from having a good overview.

I ask as someone with general knowledge of cryptocurrencies like Bitcoin, and blockchain technology. But I have not followed the ins and outs of the Bitcoin community's debates recently.

The Bitcoin blockchain needed some protocol updates and there were several views on what those changes had to be. Because the blockchain is completely decentralized any part of the network can create and maintain its own version of the blockchain, that's called a hard fork, and that is what happened on August 1st.

On July 20th this year, the whole Bitcoin community voted at 97% in favor of implementing BIP 9 (Bitcoin Improvement Proposal) on August 1st, also known as SegWit. This basically changes the structure of the blocks so that the signatures header (the witness) are segregated from the actual transactions. From there it is possible to work out an increased block size. While the majority of the community was ready to implement an increased block size (SegWit2x) through a hard fork around November 2017, some big miners, willing to handle large blocks, decided to go ahead of SegWit2x and hard fork the chain, with blocks 8x bigger, right on August 1st hence creating Bitcoin Cash (BCH).

The fork happened (you can follow the forks here) and the first block was mined around 4PM (GMT) on August 1st. BCH starts trading on the platforms that agreed to also implement the increased block size (August 1st was a rough day for crypto-exchanges, some went down for a while). Because both chains share the same history, any owner of Bitcoin (BTC) technically also owns the same amount of BCH. As of now (August 3rd, 1AM - GMT), 16 blocks have been mined on the new chain, as the miners are waiting for the difficulty level to go down (the difficulty of mining a block on the chain depends on hash power, and the new chain inherited the old difficulty level but with only around 20% of total hash power, it'll take some time to adjust).

A hard fork is an important event because this is kind of an update of the whole network at the same time. Any big players could decide to do whatever they want as the blockchain is not some server that you can just update. This implies we can simply guess the outcome of a hard fork based on what information miners decide to disclose, but always stay aware that they can still change their minds.

The real issue here is that the current protocols running the blockchain are not scalable. For a real mass adoption of Bitcoin and other blockchain related technologies, we need to improve the protocols until we figure something stable and scalable. This might take a while and we will likely see other forks like this one with new ideas on how to scale the blockchain.

On to what will happen, this is complex and evolving everyday, but BCH could actually stay around as a bitcoin-equivalent crypto for a while, or just collapse in a few hours, or maybe BCH will survive as a low value crypto like any other Altcoin... really hard to tell. My view would be that one version of the chain will surpass the other one, and I find hard for the BCT to collapse anytime soon. Some might disagree, I must say I'm pretty new to the game (like a couple of weeks), but I put a lot of effort to try to understand what was happening. It is truly interesting to see how we, as a group, are trying to understand and find the ultimate implementation of one of the latest great technology upgrade that is the blockchain.

Best way to stay informed is the Bitcoin subreddit and for a more technical view on the markets the BitcoinMarkets.


how to dump private key from multisig address how to dump private key from multisig address ?
I tried with dumpprivkey RPC function but return error : Address does not refer to a key

You can't dump the private key for a multisig address because there are multiple key pairs (thus multiple possible private keys) assigned to the address. You need to specify which key pair you want. First, get the public keys belonging to that address by using:

$ bitcoin-cli getaddressinfo <your address>

{
  "address": "<your address>",
  ...
  "embedded": {
    ...
    "pubkeys": [
      "<pubkey 1>",
      "<pubkey n>",
      "..."
    ],
   ...
}

Assuming you want the private key corresponding to <pubkey 1>, you can convert it to a simple P2PKH address and then use dumpprivkey, for example:

$ hash160 <pubkey 1>
  <pubkey 1 hash>
$ echo 00<pubkey 1 hash> | xxd -r -p | base58 -c
  <P2PKH address>
$ bitcoin-cli dumpprivkey <P2PKH address>
  <privkey>

Where hash160 is just a bash script that uses openssl:

#!/bin/bash
## Command Line parsing
#######################

if [[ $# -lt 1 ]]; then
    echo "Usage: $ hash160 <input-hex>"
    exit 1
fi

inputHex=$1

hash1="$(printf $inputHex | xxd -r -p | openssl sha256 | cut -c 10-)"
printf $hash1 | xxd -r -p | openssl ripemd160 | cut -c 10-


Unlock a Bitcoin-qt wallet How do I unlock a bitcoin-qt wallet? I know my passphrase and all.
It says that my wallet is encrypted and locked for now so how do i unlock it?

To unlock your wallet:
Option 1: Introduce password in prompt that opens when you send coins
Option 2: Console (Help > Debug window > Console)
Type the following:
walletpassphrase "passphrase" timeout

Where passphrase is your password and timeout is the number of seconds you want the wallet unlocked (i.e. 120 = 2 min). This is option is the only one when you want to do something that requires unlocking but you don't want to send coins (like dumping a private key) or when you plan to leave the wallet open and fear forgetting to lock it again.


Can a transaction be in two blocks? What happens with a valid block which contains a transaction which was already included in previous blocks? Is such a block accepted by other nodes in the network or discarded?

The second time the transaction appears in a block the outputs it claims are already marked as claimed, hence the transaction, seen a second time, would be invalid. By definition the block is only valid if all transactions in it are valid.

The only way of a transaction landing in two potentially valid blocks is during a blockchain fork, where the two competing blockchain heads both include the transaction.

If a miner were to include an already confirmed transaction it would invalidate the block, and he would lose its reward. Notice that this also avoids having a miner claim fees multiple times, which would effectively create new coins from thin air.


How would the OpenBazaar or NXT decentralized marketplace / eBay / Craigslist work? Since NXT and OpenBazaar are building a decentralized marketplace, how would this work since there is no middle party to mediate if an issue arises?

What are some proposed solutions to a decentralized marketplace so far?

One solution is to use Nash equilibrium in order to force people to cooperate.

The concept is quite simple. Both the seller and the buyer make a deposit.

If the entire buy/sell process goes fine they can recover their deposit, if it don't they both lose their deposit.

So it isn't profitable to go away with the money without sending the good nor to get the good without releasing the payment to the seller.

This solution has already been discussed. If you google bitcoin+nash+equilibrium you will find more informations.


Do I need N confirmations if I'm only worried about the transfer getting invalidated by a different block? Say I ask Bob a lot of bitcoins in exchange for an expensive product. Bob sends it to me and I wait 1 confirmation to send him the product, because I trust Bob. I am only worried about the transaction being invalidated by a block that doesn't contain it getting solved. How can I determine a "safe" number of confirmations as to make that risk negligible? When I read about the "6 confirmations" thing it's always about preventing double-spending, and some even say that if you trust the other part you don't even need confirmations. Wouldn't that (zero confirmations) put the receiver in great risk of having the transfer invalidated?

A transaction can only be invalidated by an attempt to double-spend. That is, the same transaction can be in block X or block X+1 or block X+n as long as there is no double-spend associated with it.

If you want to make sure that a transaction goes into a block soon-ish, try to add a fee that's sufficient to make a miner want to add it to a block. In that case, you only need a couple confirmations as being an orphan block after that is exceedingly unlikely.


To create a new bitcoin address cloned Bit-Wasp/bitcoin-php code I am using code from GitHub.

Once I run composer its gives error as:

  C:\wamp64\www\bitcoin-php-master>composer require bitwasp/bitcoin
  Using version v0.0.33.1 for bitwasp/bitcoin
  ./composer.json has been updated
  Loading composer repositories with package information
  Updating dependencies (including require-dev)
  Your requirements could not be resolved to an installable set of packages.

Problem 1
    - The requested package bitwasp/bitcoin No version set (parsed as 1.0.0) is
satisfiable by bitwasp/bitcoin[No version set (parsed as 1.0.0)] but these confl
ict with your requirements or minimum-stability.

  Installation failed, reverting ./composer.json to its original content.

Since Bit-Wasp/bitcoin-php has its own composer.json file, after cloning you should just run:

composer install

If there is still some issue, run the following command to diagnose the problem:

composer self-update
composer diagnose

Otherwise report it at the project page.


How does lnd's autopilot feature work? Autopilot automatically connects to peers in order to establish a p2p network. I didn't find however a complete explanation of its motivation and logic.

there is an issue out discussing the strategies for the autopilot (c.f.: https://github.com/lightningnetwork/lnd/issues/677 ) there it is stated that it currently uses a constrained barabasi albert model or preferential attachment ( https://en.wikipedia.org/wiki/Barab%C3%A1si%E2%80%93Albert_model ) this means that it will look at the topology of the network and randomly select nodes to connect to. However the probability distribution is not uniformly distributed but weighted by the node degree (meaning the numbers of channels a node has) of the nodes resulting to the fact that the autopiolot is more likely to connect to nodes which are already highly connected.

the model is constrained because currently nodes that are too big ( I think having more than 5k channels) will be excluded.


Coinjoin implementations What are the different coinjoin implementations being used right now?
What are the trade-offs involved in using one of them?

Joinmarket

One group of participants (called market makers) will always be available to take part in CoinJoins at any time. Other participants (called market takers) can create a CoinJoin at any time. The takers pay a fee which incentivizes the makers. A form of smart contract is created, meaning the private keys will never be broadcasted outside of your computer, resulting in virtually zero risk of loss (aside from malware or bugs). As a result of free-market forces the fees will eventually be next to nothing.

https://github.com/JoinMarket-Org/joinmarket-clientserver
https://youtu.be/hwmvZVQ4C4M
Wasabi
Used Zerolink earlier.

WabiSabi is a protocol for constructing CoinJoin transactions with the aid of a centralized coordinator. It utilizes keyed-verification anonymous credentials, homomorphic value commitments, and zero knowledge proofs to achieve privacy and flexibility.

Coordinator will keep a registry of the separate inputs and outputs, ensuring that a user can only claim the amount of Bitcoin they are entitled to, but without learning about the links between these.

WabiSabi builds on Chaumian Coin-
Joins, adding support for arbitrarily variable amounts.

https://github.com/zkSNACKs/WabiSabi/releases/latest/download/WabiSabi.pdf
https://github.com/zkSNACKs/WabiSabi/blob/master/explainer.md
Whirlpool

Whirlpool theory is based on a fork of the original ZeroLink framework which was originally co-written by nopara73 and TDevD, with thanks to Adam Gibson and Chris Belcher from JoinMarket, Ethan Heilman from TumbleBit, Dan Gershony from Breeze Wallet and Kristov Atlas from Open Bitcoin Privacy Project for their reviews, suggestions and feedback.

Whirlpool is a fully modular CoinJoin implementation based on a heavily modified fork of the ZeroLink theory. You can review the theory or review the architecture in further detail.

https://code.samourai.io/whirlpool/Whirlpool


Restricting transferability of Smart Contracts Can a smart contract be created which can be exchanged once at point of sale, and only transferred subsequently through a single approved exchange? Can that be written into the contract itself?

Bitcoin script only allows the conditions under which an output can be spent to be controlled, it does not provide a method for dictating what can happen to the output once these conditions have been satisfied. The concept you are describing is called a coin covenant, the linked thread goes into some detail explaining why this is generally a bad idea.


First time bitcoin buyer; been reading, but still not sure how to purchase I want to buy bitcoin for the purpose of making a transaction with a business that specified bitcoin. I have a Copay wallet on my desktop, but after doing quite a bit of reading, I'm still not sure about where to go to buy them and how to get them in my wallet. I would be paying with my Visa debit card or through Pay Pal. I've already calculated the amount, which would be 0.025 bitcoin which roughly comes out to $50 US. I know I have to click receive and then to 'request specific account', which takes me to a place where there's a QR code and an address. Not quite sure what the long alpha numeric address is for and about how I purchase the bitcoin and get them into my wallet. I see there is a slower and faster way to do this. Fast is good, but I"m in no particular hurry If you can help, I think that I'm almost there. I"ll keep reading in the interim.

Thanks so much,

John

The long alphanumeric address is one of your pseudonymous representations in the Bitcoin network. You may hand it out to your business partner in order to specify where you wish to receive the money.

After you've imparted your address, the sender may create a transaction which is a message to the Bitcoin network that signals his intent to sign over some of his bitcoins to you. This transaction will then be propagated through the network and hopefully incorporated into a block for confirmation. Once the transaction is written to a block, it has become part of the blockchain and the sent amount has been —bar exceptional occurrences— reliably signed over to your wallet.

Since there was really only one piece of information or step missing from your description, I hope that you're well informed at this point. ;)

To get a better overview on some related topics, may I suggest the following topics:

What's the difference between a wallet and an address?
Can someone explain how the Bitcoin Blockchain works?
I am new to Bitcoin, how can I get started?


Lightning network: how are "only X can broadcast" transactions implemented? The Lightning paper states on page 12 (emphasis mine):

  This can only be enforced if one is able to ascribe blame for
  broadcasting an old transaction. In order to do so, one must be able
  to uniquely identify who broadcast an older transaction. This can be
  done if each counterparty has a uniquely identifiable Commitment
  Transaction. Both parties must sign the inputs to the Commitment
  Transaction which the other party is responsible for broadcasting.
  Since one has a version of the Commitment Transaction that is signed
  by the other party, one can only broadcast one’s own version of the
  Commitment Transaction.

How is this technically implemented? How do I make two transactions, both of them signed by Alice and by Bob, such that each of them is valid only if broadcast by Alice or by Bob respectively?

Because the commitment transactions spend from a 2-of-2 output, the transaction cannot be broadcast unless both parties signed the transaction. So what LN does is it gives the other party an unsigned version of the transaction and that other party returns you that unsigned transaction with their signature. Because the other party only has the transaction with one signature, it is invalid and thus they cannot broadcast it. However you have that transaction with one signature, and you can then sign it with your own private keys and produce the full transaction with both signatures. Because you are the only person with that transaction, only you can broadcast it.


Can someone explain double spending to me? I am restoring a backup of my Bitcoin Core wallet on a new PC. I downloaded the complete bootstrap.dat and placed it in ~/.bitcoin. I thought using the bootstrap would make things faster, but importing from disk seems just as slow. Oh well.

Anyway, currently Bitcoin Core has imported blocks through Jan 2014. I made bitcoin transactions after Jan 2014 that aren't reflected in my wallet. That is to say, I have a higher balance available in my wallet than I really should.

Could I double spend these coins by sending them to another bitcoin address that I own?

No you cannot. When you try to send a transaction to the chain which is not allowed by the chain (so sending more coins then you own) results in a invalid transaction. The case now is that your program didn't process your recent transactions, and therefor thinks that there are more bitcoin in your wallet then there really are. Otherwise it would be far to easy to doublespend: just reinstall Bitcoin Core and have a wallet which held a lot of BTC prior a specific date. If you are interested in reading more about doublespending (which I think you are not, just wanted to know if you were possible right now) you can read this.


Sending bitcoins in regtest to client I have bitcoind hosted on a local machine and I would like to set up a remote client to do some bitcoin URI testing on another local machine. I have Bitcoin-QT installed on the client and updated client bitcoin.conf as following

regtest=1
connect=0.0.0.0
rpc_connect = 192.168.0.252 #Address of host

In the client Bitcoin-QT, I copy the receiving address and try to have the host send regtest coins to the address with the command

bitcoin-cli -regtest sendtoaddress muteqiroK9LNRAUppnicQepBhPvaEuW8TG 1.00

This does not work. Can anyone give me some direction as to how I would get this working?

Thank you!

Simple solution, here is what I did.

client bitcoin.conf

regtest=1
addnode=$ADDR_OF_HOST

then I opened port 18444 on host and all transactions synced on client.


My pool shows no evidence of block that my computer discovered It appears that my computer discovered a block i.e. bfgminer printed an Accepted line, but in my BTC Guild account there is no evidence of this and in fact, their records of when my computer last took part in the pool are wrong.
Given the hex number of my block, is there any way for me to track down the block to find out what happened to it?

UPDATE: Turns out the Accepted share was a test share, used to detect botnet machines.

Thanks.

Pooled mining lowers the difficulty that it reports to miners and the results are submitted as proof of work to the pool, so they can pay you.  Only a small portion of submitted shares are valid solutions to an actual block.


Claim BCH with Electrum wallet Here are the steps I took:

I moved my BTC to a new Electrum wallet and waited to get 6 confirmations.
I copy pasted the seed of the old electrum wallet
I installed Electron Cash on a new PC
I created a new wallet there and used the seed of the old electrum wallet

output: 0 BCH

is this because I could have had Multibit HD at the time of the fork? I do not know for sure if I used Electrum back in august 2017...
Or is there an other explanation?

edit I think that I found a similar situation here Bitcoin Cash Multibit HD/Electrum but I am not 100% sure that I had a multibit hd wallet back then or an electrum. But because my electrum seed gave me 0 BCH it probably was multibit hd back then.

Where have your BTC been on Aug 1? That's deciding.

If I understand it correctly, you created a new BTC-wallet and sent your BTC there. But your BCH are still on the adresses on which your BTC have been on Aug 1.

So you need to get the seed of your older wallet (where they have been on Aug 1) or (if you did not use a HD wallet that time) you need to get the private keys of the adresses of the old wallet (almost wallets allow you to export them). You can import them in Electron Cash then.


where in the source code is the the proof of work checking the blockheader hash and nonce? Where in the source code do we check whether

 hash(blockheader*nonce) < Difficulty

In fact, the line I found is as follows:
https://github.com/bitcoin/bitcoin/blob/v0.17.0.1/src/pow.cpp#L87

My problem with this is 3-fold

a) this is not the code that miners use to perform the check; it probably is the validation on node-side ?

b) here the "hash" refers to what exactly ?

c) why is this value tested against nTarget ? rather than Difficulty ?

d) this check is usually advertised in media as "<"less rather than "<=" less than equal. But seeing how this line
is coded , it means
     HASH<= nTarget
is OK.

Where in the source code do we check whether
  hash(blockheader*nonce) < Difficulty

The function you are looking for is in pow.cpp:

bool CheckProofOfWork(uint256 hash, unsigned int nBits, const Consensus::Params& params)
{
    bool fNegative;
    bool fOverflow;
    arith_uint256 bnTarget;

    bnTarget.SetCompact(nBits, &fNegative, &fOverflow);

    // Check range
    if (fNegative || bnTarget == 0 || fOverflow || bnTarget > UintToArith256(params.powLimit))
        return false;

    // Check proof of work matches claimed amount
    if (UintToArith256(hash) > bnTarget)
        return false;

    return true;
}

  a) this is not the code that miners use to perform the check; it probably is the validation on node-side ?

This is on the node side. Miners do not use Bitcoin Core software for mining, this check is implemented as part of the ASIC design, so not even software at all.

  b) here the "hash" refers to what exactly ?

Here the hash is the function used to calculate the block hash. In Bitcoin, this is 2 rounds of sha256, sometimes called hash256. See Bitcoin Wiki - Bitcoin Hashing Algorithm

  c) why is this value tested against nTarget ? rather than Difficulty ?

Difficulty is just an abstraction of the nTarget, which represents the actual 256 bit value that the header must be less than (or equal to). The header is a 256 bit value, so it must be compared to nTarget. The conversion between nTarget and difficulty is difficulty = difficulty_1_target / nTarget, where difficulty_1_target is the target of the genesis block. See Bitcoin Wiki - Difficulty

  d) this check is usually advertised in media as "<"less rather than "<=" less than equal. But seeing how this line is coded , it means HASH<= nTarget is OK.

correct.


How do I start accepting bitcoins legally in Canada? I own a business and I want to know how to accept bitcoins for payment and whether it is legal to accept them in Canada?  For example, if someone pays me 2 bitcoins for a computer, do I need to charge taxes? If yes, do I need to charge 2 bitcoins and 50$ in Canadian money so I can give the taxes to the government?

IANAL. Yet, I am baffled, why a different payment method should exempt you from paying taxes. I'd just treat Bitcoin in that regard like another fiat currency or different payment method. E.g. a shop at the border to the US taking US dollars in exchange for goods certainly wouldn't be legally exempt from paying taxes on that sale just because of it being paid in USD instead of CAD.

So, in my experience the flow would be something like:

Calculate your customers bill just as you would in any other case in Canadian dollars.
Add shipping fee and similar.
Apply VAT based on CAD value. (1)
Present the bill stating the amount in CAD, "payable in X Bitcoin to address 1xyz".
Put the transaction into your bookkeeping with the CAD value, including a remark "payment method: Bitcoin, X BTC".
Keep Bitcoin/Sell Bitcoin/Whatever floats your boat.
When paying taxes for your business, include amount of CAD in height of (1) for the transaction just as you would with any other sale.

I am not a lawyer, I have never lived in Canada, the above is solely based on my experience of how the world works. ;)


I somehow sent a transaction to my own wallet address I wanted to make a transaction to a vendor but somehow I made it to my own address?
It is yellow color and I put very very low fee.
It is unconfirmed yet because of the fees.
Should I just increase the fee by a lot to get my coins back, worth 60£?
And will the coins add automatically in my wallet if both are on the same address?
I only need that ''Yes'' because I'm a rookie and dunno how this will happen.
Thank you.

Welcome to Bitcoin. The "balances" in Bitcoin are actually explicitly tracked bits and pieces. You can think of it akin to the coins and bills of cash: when someone sends bitcoins, the transaction explicitly states which coins or bills get spent, and describes which new ones to create. We call these bits of bitcoin unspent transaction outputs (UTXOs). In most Bitcoin transactions, the UTXOs you have in your wallet will not perfectly fit the amount you are trying to pay. In that case, your wallet software will automatically create a new UTXO that sends the remainder back to yourself. Imagine if you go to the pub and pay for a £3 pint with a £10 note. The bartender gives you £7 change. In Bitcoin, the equivalent to the £10 note would be you spending a UTXO from a previous transaction as an input to your new transaction. The transaction input consumes the £10 note and the transaction then creates two new UTXOs, one worth £3 for the bartender and one worth £7 for yourself.
What I'm trying to get at is, that in most transactions you will pay the receiver and yourself: in order to return the remainder as change to yourself. I am wondering whether that's what you are seeing in this transaction.
If you in fact only paid yourself, you're fine as well. You may have split your bitcoin funds into two UTXOs now, but your wallet is capable of using multiple of them in a transaction together.


Install bitcoin core on raspberry pi 3 Is it possible to install bitcoin core on raspberry pi 3 since I tried it once and it did not work out and I have an external drive for the bitcoin data for it?

OS: raspbian (8 GB space with 1TB HDD external drive)

If it does not work, can you explain it details to me why it cannot?

If it does work, can you tell me the correct way to install it?

It does work. Yes you need an external HD for the blockchain data (unless you want to run a pruned node) and Raspian is fine.

In my opinion the best tutorial for setting up a full node on RP3 is this:

Damian Mee's Guide


I have forgotten my Blockchain account password and 12 word recovery. I have the wallet id and password to the wallet. Can i get my funds back? I have forgotten my Blockchain bitcoin account password and 12 word recovery(possibly didn't even create one). However I do have my wallet id and the password to the wallet. Is there a way to get the funds? I read about some stuff of brute forcing the password or using something like a dust attack to get the funds out. Would this work? Thanks for any help

If you have a custodial account with Exchange.blockchain.com, you must contact them for help. They own the money, not you ("Not your keys -- not your bitcoin").
If you have a non-custodial wallet downloaded from Blockchain.com, you should normally recover control over your money by restoring the wallet from a backup or from a safely stored record of either the recovery-phrase or the private-key. If you have none of these, you have lost control of the money.

References

Blockchain.com custodial account
Blockchain.com non-custodial wallet

Write Down Your Backup Phrase
Your backup phrase is the most important of all security measures. It is the key to ensuring your access to your funds if you forget your password or Blockchain is unavailable.


What's the advantage of using bitcoin to buy coffee? Why would an average consumer prefer bitcoin over fiat options like credit card and ApplePay to buy coffee? Even assuming bitcoin transaction fee is minimal and instantaneous (say, after implementing Lightning Network), is the 2-3% transaction fee reduction worth paying with bitcoin, given its drawbacks such as volatility and lack of chargebacks?

There are billions of people that don't have access to credit cards and banking facilities that the privileged people take for granted. There are also people that get into financial trouble and lose all credibility in the banking system. Bitcoin provides a way for these people to transact without being part of the banking system. Coffee, however is a very superficial use case. One of the pressing needs is for people to send money back to their families in foreign countries, the current system of international payments makes it extremely expensive and very slow, Bitcoin and the lightning network can really help in cases like these.


Merkle tree structure for 9 transactions I've been reading the developers documentation, other sources and the good books about Bitcoin. But none of the resources shows a merkle tree with 5 or more leafs. I'm confused, does the bitcoin core make a merkle tree of transactions (a,b,c,d,e,f,g,h,i) like:

H(
  H(
    H(
      H(a,b), H(c,d)
     ),
    H(
      H(e,f), H(g,h)
     )
  ),
  H(i,i)
)

or It's wrong?

I'm asking, because the structure of this one is not close to a complete binary tree, as every example I've found in the resources. If I'm right, the structure would be something like:

               _____/\______
             / \           / \
            /   \         i   i
           /     \
          /       \
         /         \
        /           \
      /   \       /   \
    / \   / \   / \   / \
   a   b c   d e   f g   h

Thanks

That's not exactly right. It's more like this:

                            ROOT
                            /  \
                         /        \
                      /              \
                   /                    \
               z1                            z2
             /  \                           / \
           /      \                       /     \
        /            \                /            \
      y1              y2             y3             y3
     /  \            /  \           / \
   /      \        /      \       /     \
  x1      x2      x3      x4     x5    x5
 / \     / \     / \     / \     / \
a   b   c   d   e   f   g   h   i   i

At each level of the tree, if it's odd, then you just copy the last element onto the back of the tree, and then you hash the pairs to produce a new list at about half the size. Then you do the same thing with that list, in a recursive algorithm, repeating until you have just one element left (Note that if you only have 1 transaction in the block, the merkle root is just the TXID of that transaction). The result is not always a binary tree, it just happens to be when the number of transactions is a power of 2.

It's also interesting to note that the fact that i is hashed with itself introduces a vulnerability (CVE-2012-2459). Basically, I could publish a block that actually listed the transaction with i as the TXID twice at the end of the block. Obviously that block would be invalid, as it has the same transaction twice in the block. But the merkle root would be the same as a block that had a valid list of transactions, with i listed only once. But since you think you have already seen the block with with that header and merkle root, you would deny it. This is fixed by marking all blocks that have duplicate values in the merkle tree structure as having invalid merkle roots.


Solo mining requirement to win a block everyday? What's the hash power requirements to solo mine and win at least one block a day?

Two cases (with 10% luck, means mining requires to iterate 90% of unsuccessful hashes),

Mine 24 hours a day and win at least one block
Mine 10 - 30 mins and win at least one block

You can mine 1 block roughly every 10 mins, hence total blocks per day is 6 x 24 = 144

The current Hash Rate in the Network is about 70000 GH/sec (Source: Blockchain.info]1

If you have 100% of the Hash power, you will get all the blocks each day.

To get at least one block a day, you will need roughly 0.7% of the current total hash power (1/144), that is about 486 GH/sec of hash power.

To get at least one coin a day, you will need at least 19.44GH/sec of hash power ( 486 / 25 coins per block)

The hash power requirement will change as the network hash rate rises with more ASIC devices shipped.


Possible to include a per miner transaction to prevent withholding and independent rebroadcast of a solved block? Update: This is a bad idea because it simply won't work, but it did help me understand what happens between a Miner and a Pool.

And if you missed it in the comments, read @Meni's PDF for a threat and profitability analysis of pools.

Is it feasible for a pool operator to include a "signature transaction" sending a small amount of BTC from and to themselves... and then monitor the public block chain for these addresses if share withholding (and subsequent solo broadcast) is attempted?

In other words, if a pool has 10,000 workers, then generate 10,000 addresses.   Then create a transaction with an output corresponding with the worker address.  Of course this money won't go to the worker (unless the operator desires it), but it can be used as virtual stamp on the entire block.

Is this a viable strategy?  If so, what scope is best for this check: per miner, per x miners, or per pool?

(I think the per pool scope may be a good way to get a measurement on % of cheaters)

I think you may be confused about what block withholding means.

Pools already assign unique work to miners which credits the pool, not the miner. A miner cannot take the block reward for himself.

"Block withholding" means the miner submits shares normally, unless the share happens to be a block. Then he withholds it for either sabotage or lie-in-wait. Since block finding is random, no "marking" by the pool can help it determine if the miner found a block or not.


How to: Check whether or not transaction inputs have been previously spent Maybe I have overlooked it, but I think the "Bitcoin Developer Reference" does not specify how a miner has to check whether or not transaction inputs have been previously spent.

How is it done?
And espacially how is this enforced in the process?

All I found is 5.2 "process" 2.) in the 2016 paper.

I think, the miner has to look at every block after the "oldest" referenced transaction input and make sure no transaction in no block has the appropriate transaction as input. Is that true?

In that case, what enforces the miner to do so?

Any node (not just a miner) can check whether a transaction's inputs have been previously spent by looking through the entire blockchain to see if any transaction has spent that input. There is no correct or incorrect way to do this; not all nodes have to do this in the same way.

The common way to do this is to trust yourself (as a node) to have verified the blockchain correctly in the past. What Bitcoin Core (and other software that follow Bitcoin Core's methods) does is it maintains a separate database that contains all of the unspent transaction outputs. So if the previous outputs that a transaction's inputs references are not in this database, then the node declares the transaction invalid. It assumes that its database is correct because it built that database.

There is nothing that forces miners to do anything. A miner could create an invalid block that contains an invalid transaction (e.g. one that spends from a non-existent output). However all nodes (not just miners) verify that blocks and transactions are valid. So the Bitcoin network will reject any invalid blocks and thus the miner will not actually get his reward for his work. This incentivizes miners to verify block and transactions, but they aren't forced to.


What key derivation function uses Electrum / how generates private key? I know some brain wallets are using scrypt as the key derivation function and AFAIK scrypt is a good derivation function as it is deliberately slow and makes use of big amount of both CPU and Memory, difficulting brute force attacks.

But I couldn't find which derivation function is actually using Electrum wallet or how does it generate the private key.

Finally, how secure is to generate a wallet in Electrum style from 2048-word list compared to a brain wallet? Apparently to me, it looks like generating the key from a limited set of words would be less secure than doing it from a free-passphrase... how it really is?

Key derivation from seeds is standardised across wallets - Electrum specifically follows the BIP32 spec for key derivation.

Looking at the security aspect, a set of 12 words and 2048 words to choose from results in log2(2048^12) = 132 bits of entropy. If I've done my maths right, this is equivalent to a 22 character long completely random alphanumeric password.

A 256 bit bitcoin private key has 128 bits of entropy, so an electrum 12 word seed is about as secure - it is essentially impossible to crack through brute force.

  Apparently to me, it looks like generating the key from a limited set of words would be less secure than doing it from a free-passphrase

I'm not sure of any wallets that use a passphrase to derive keys - usually a passphrase is used to encrypt a set of private keys, as opposed to deriving them from scratch. For example, in Bitcoin Core, the private keys are randomly generated and then the passphrase is simply used to encrypt the file storing them on disk.

The benefit of using a seed-based derivation approach (such as in Electrum) is that the seed is enough to restore all the associated private keys. Otherwise, every private key for every address would need to be backed up and kept secure.


Is there a reason to why Bitcoin Core does not implement BIP39? Is there a specific reason to why BIP39 isn't added to Bitcoin Core? Seems very trivial to add and am confused to why it isn't there.

BIP 39 is not in Bitcoin Core largely for implementation reasons and because BIP 39 is not as secure as it could be.

The structure of Bitcoin Core's wallet doesn't really allow for BIP 39 to be implemented. The current structure doesn't allow for 512 bit seeds as BIP 39 specifies, and adding it would require some significant changes to the wallet code. Implementing BIP 39 would also require implementation of PBKDF2, although that isn't very hard.

Also, more generally, many Bitcoin Core contributors don't consider BIP 39 to be secure. It uses PBKDF2 which is generally regarded to be a fairly weak KDF so it isn't considered to be good for the secure storage of all of your Bitcoin. Some software (such as Electrum) used BIP 39 in the past but have switched to using their own mnemonic algorithm because of this weakness in BIP 39.

BIP 39 mnemonics have some other issues as well such as version numbering (or rather lack of) and the use of a fixed wordlist. Electrum has documented their reasons for why they don't support BIP 39, and those reasons are the same for Bitcoin Core.


Fundamental Question on Bitcoin: How would one convert his "bananas" into bitcoins? In one of the presentations by Andreas Antonopoulos on Bitcoin, he said that "there are 6 billion people in this world who have no banking facilities, who live in places where they have cash or barter based societies. In these places, where banking services will never reach and the nearest bank is 100 miles upstream, where the only form of technology is a Nokia 1000 feature phone, every phone become a banking service"

My question is this. In a scenario as described above, how would one transact his/her hard money or the farm products (say bananas) using a basic phone without any banking facility? In other words, how will one convert his "bananas" to bitcoins?

how would one transact his/her hard money or the farm
  products (say bananas)

It is not possible to transact/transfer/convert bananas to anything else. The same situation is with any other things in real and online world.

So, if you have bananas you have only one possibility: exchange them for something to a neighbour. Give me your bananas and I will give you my old shoes. If we are far away to each other, we should construct a chain of exchanges: you sell your bananas to somebody (exchange for your local money), he delivers bananas and sell them to me (exchange for my local money).

  using a basic phone without any banking facility?

We do not need phone and banking at all here. But if you want to use a phone in this chain of exchanges, you may have it in your pocket.


Copying asker's own answer, so that this question can be removed from the unanswered queue (assuming this answer gets upvoted).

  I have found out how to get rid of the problem: Setting the start volt 0.05 below max. voltage on all loops seems to have made it more stable and the problem vanished... I still don´t know how it came about but at least I found a workaround :)


Bitcoin-Core re-synchronizing after updating to v0.18.0 I recently updated Bitcoin-Core to 0.18.0 and then it had to resync the blocks which has taken 8 days so far and is only on 67% completed (using windows 7). I have the files saved in D:/.. I noticed the config file was blank. What should be written in there in a standard case?

I did try to install node launcher but was to technical for me, but after I tried this I noticed I had another bitcoin folder in F:/ which I have since deleted.

By default, Bitcoin Core does not create a configuration file. If you want to change configuration options, you can either pass startup parameters or add the bitcoin.conf yourself.


Constantly monitor bitcoin wallet using Python/Django? I am building a site with python/django, running bitcoind in the background. I need to constantly check all addresses in the wallet to do a sql insert statement to my database whenever an incoming transaction is received, and maybe send some funds out in certain cases.

My site is working ok, and I wrote a python script that runs separate and uses a simple while true loop to achieve this. The problem is, when the script is running, it takes up too much memory and the site times out when I reload it. How to avoid this? I really need a background process running at all times. I am trying to use threading in the script, but it still seems to hog too much memory.

I thought about running bitcoind with the same wallet and the script on a separate computer, but I heard that is a bad idea.

Thanks.

Use wallet notify. You can set it in your bitcoin.conf file and have it call some python or django script.

Or another solution would be to constantly poll for new transactions, though I would not recommend this.


What can I buy with cryptocurrencies today I have read about CoinPayments, which allow stores to sell goods for crypto currencies. Are there more services like them ? Where else can I expect crypto coins to be accepted ?

Dr. Lilia Etkina in Long Island City can fix your teeth or do a cleaning for a fraction of a Bitcoin.

https://www.zocdoc.com/dentist/liliya-etkina-dds-58296


Is there a way to stop someone from giving me bitcoins to an address that I own I know I should be thankful for free money. But sometimes it might come from an undesirable source. Is there a way of preventing unwanted credits?

I suppose I could look at the block chain and pay it straight back...

No, there is no way to block people sending you bitcoins.  You could, however, send the bitcoins back to the sender.  In fact, you can redeem the transaction output created by the sender in a new transaction, created by you, back to the sender.  This would show that precisely these funds (not just funds to the same amount) were transferred back to the sender.


Wallets that support 40 byte message attachment via OP_RETURN? Desktop / Mobile? I see that many new Bitcoin 2.0 apps are making use of the additional OP_RETURN parameter for attaching data. I see that max limit is 40 bytes or roughly 40 characters? My question now regarding OP_RETURN is:

So is it one OP_RETURN parameter for each bitcoin transaction or per each input/output address? If its each transaction, so its safe to say its about .0001 btc to send 40 byte message?
Which desktop / mobile wallets support adding a custom OP_RETURN message? (ex. attach a short url link)
Aside from OP_RETURN message attachment, what other methods are there to attach custom data?

So is it one OP_RETURN parameter for each bitcoin transaction or per
  each input/output address?

One OP_RETURN output per transaction regardless of the number of inputs and outputs is standard for 0.9.x bitcoin core clients.

  If its each transaction, so its safe to say its about .0001 btc to
  send 40 byte message?

Yes, but you should not do it without significant reasons.

  Aside from OP_RETURN message attachment, what other methods are there
  to attach custom data?

There are different methods. You can use fake public keys in bare multisig outputs. Or encode some data with values or addresses of other outputs.


Can a malicious user recieve bitcoins by first finding the proof of work of his/her transaction then releasing it Assume a malicious user wants to make bitcoins through mining. A user can create a transaction (let us assume it is a real transaction) and then create a block containing that single transaction. The malicious user then works on finding the correct nonce for that block before releasing the transaction to the network. Once the value is found, the malicious user releases the transaction. However, he/she already has valid proof of work and has the advantage over all other miners. Therefore, the malicious user can obtain the reward.

Is this scenario possible to happen?

What you describe is possible, but gives no advantage whatsoever to the "attacker".

Blocks build on top of their predecessor by referencing it in their header. Thus the attacker you describe would need to update his blocktemplate whenever a new blockchain tip is published. However, then he is doing exactly the same as every other mining entity, except that he's forgoing transaction fees worth one full block.


Official currencies in Japan Now that bitcoin has been recognized as a medium of exchange, rather than a commodity subject to certain taxation in Japan, is it the only such one other than the Yen?

Since the pronouncement of course falls far short of declaring bitcoin legal tender, does it in effect mean anything other than it is now legal to operate an exchange?

Edit: I reworded the original question, as I had incorrectly equated the terms "form of payment" and "medium of exchange".

TL;DR: Bitcoin has been declared a legal form of payment which is not the same as an official currency.

I think that it may not be clear what a "legal form of payment" means and how this differs from the official currency of a country.

"Currency" usually refers to a form of money issued by a government, which makes "cryptocurrency" a misnomer to some degree.
Currencies generally have a high level of protection and status in their country, for example the nation requires the taxes to be paid in terms of the currency and usually requires its population to accept the currency as a means of payment. However, first and foremost the currency defines the unit of account that is being predominantly used in the country.

Yet, nations recognize a number of different ways to settle obligations explicitly which are sometimes called "legal forms of payment". These may be different forms of transferring the nation's currency, but can also be other forms of money. For example, if you are using a form of money that the nation has not recognized as legal form of payment, in the case of legal dispute it may first need to be established whether the payment was valid in the first place, and if the payment is not recognized as such, the value may be lost.

Some examples of legal forms of payment are cash, money orders, checks, and wire transfers, and in most countries also digital payment networks such as PayPal. Although uncommon, payments settled in foreign currency will also be recognized. In some regions around the world there are local currencies that aim to encourage commerce in their region. Often these regional currencies are tied to the national currency, but given out at a discount, e.g. the Reka-checks can be bought by employees in Switzerland for 3-20% less than their face value but only used to pay for tourism services in Switzerland.

To my understanding, what happened in Japan a few days ago was the recognition of Bitcoin as a legal form of payment. This does not give Bitcoin a special status, except that value transfers performed with Bitcoin are now explicitly recognized as payments in Japan. Similar things have happened in the past, e.g. when Germany declared that Bitcoin would be treated alike to a complementary currency, or (IIRC) Belgium declared that it would treated like foreign currency.

An overview of the current legal status of Bitcoin in the world can be found on Coin Dance.

Note: I'm neither a lawyer, nor an economist.


Is there actual economic value in trading crypto currency? When you invest in a stock, you're helping the company to raise capital.

It seems like trading crypto currency is nothing more than putting money into a pool (market cap) and trying to predict when other people will put more money into the pool. No economic productivity happens here except for money changing hands. Is there actual any value in trading coins or is it just money changing hands?

Yes, there is.

People who trade currencies (or commodities, for that matter) broadly belong to two groups - those who actually need to convert one thing to another; and those who hope to buy low and sell high for profit.

In Bitcoin's case, typical examples of the first group are an individual who receives his salary in USD, and converts the USD for BTC to use it; and a business which receives payment in Bitcoin, and converts to USD to pay its suppliers. In both cases, economic value is created by enjoying Bitcoin's advantages; and in both cases, trading BTC/USD was needed to allow activity that would be impossible or less efficient without trading.

The second group is simply people who trade BTC/USD for profit, and often come out with the same currency with which they went in. To be successful, they need to buy low and sell high - and if they manage to do that, they are actually providing a service to the first group. Since buying drives the price up and selling drives the price down, buying low and selling high keeps the price stable at some midrange. This makes the price more stable, and reduces slippage costs, thus making the usage of the currency more efficient. So they are also creating economic value by making it easier to use the currency for commerce.

This is true even over long periods of time. A Hodler who buys a bitcoin for $1, and only sells decades later when the price is $1M, is helping the economy by giving the currency a push when it is nascent and underappreciated, and only realizing her gains once Bitcoin has reached its potential.

Of course, a dumb or unlucky trader can buy high and sell low; in this case, he is actually adding volatility to the price, and creating economic harm. But he will also take a loss himself if he does that. As long as the trader is making a profit, she is creating economic value.


Bitcoin Mining with Poweredge Servers? From a previous business, I have 5 Dell Poweredge 2850 Servers, each with 2 Intel Xeon 3.4 Ghz processors. I also have 2 2950's, a huge 7150, and few other smaller 1 U Dell servers. All but 2 of those machines are just sitting there in the rack and not even turned on right now. I have seen CPU miners and know that these are not optimal, but have considering making 5 mining servers out of the 2850's to just see what happens. My power bill increases around $400 a month when running all of these servers/switches/UPS/Firewall/etc. (more in the summer than winter of course). I have all the infrastructure and hardware to setup these machines, but I can't seem to find any data on potential earnings with Xeon processors to see if it would be worth my time or the extra power to build miners out of these machines. I understand that with the difficulty going up the earning will continue to decrease, but if anyone could provide some rough potential numbers or suggestions for further research, it would be appreciated.

If you could get recent GPUs (Radeon HD 6850 or newer) for very, very cheap, you might be able to make a couple of Bitcoin per month. It may not be worth it, depending your electricity costs.

Use these tools to help guide you to an informed decision:

P3 Kill A Watt power meter, to find your actual power consumption
Mining hardware comparison, to find a GPU that will work in your system and plug its hashrate into...
Mining profitability calculator, to calculate what your break even or profit point will be.

vanitygen is probably your best bet given the equipment that you already have.


Electrum I requested wrong amount QR code but paid larger amount from luno? I requested "Receive" bitcoin on Electrum and mistakenly entered my amount in "mBTC" instead of "BTC". (My first time) I then scanned the QR code with LUNO under Send bitcoin. It gave me the incorrect BTC amount (not realising it was because I entered in mBTC in Electrum) so I corrected it on LUNO and clicked send. Now electrum says under the mBTC transaction "PAID" but its not the full amount. Under the bottom left corner BALANCE it says "0" but with the correct amount in brackets saying (0.01... UNCONFIRMED). Does this mean the funds will still find their correct wallet destination even though the QR request scanned was for the wrong amount?

In Bitcoin, the sender chooses the amount to send. Because you corrected the amount in Luno and the correct 0.1 amount is showing (although currently unconfirmed) in electrum, you know this is the balance you will receive once the transaction is confirmed.

To understand why it is currently unconfirmed, see Why is my transaction not getting confirmed and what can I do about it?


Best way to set up gpu mining rig? Before you yell at me for how bad gpu mining is, its the only thing within my budget right now. But Im not sure what equipment to use, or how to set it up. I know I need to set up my mother board and power supply below the GPU rack up top, but how can I fit as many GPUs as possible? I was thinking of using a riser board with multiple slots, but Im not sure if that would work. Anybody mind helping me out here?

GPU mining in Bitcoin is simply not recommended nor is it at all profitable. This is the same for all other SHA256d coins due to re-purposing of Bitcoin hardware (which share the same algorithm).

Your electricity cost will be far greater than any rewards unless you are using an ASIC (Application specific integrated circuit) miner, any even in that case you may require cheap electricity in order to make it profitable.

However, GPU mining does exist in other Proof-of-Work coins that have not (yet) been primarily flooded with ASIC hardware. Ethereum, for example, has a relatively fair enough difficulty to make GPU mining viable in specific cases. I recommend using this site to compare graphics card profitability in different coins.

NOTE: Mining Ethereum on a graphics card will require atleast 4 GB of VRAM in order to fit the entire DAG file required for mining.


How can I control which coins to spend in a transaction? When creating a bitcoin transaction, you have to choose which coins to use in them. The standard client does this in a way to avoid unconfirmed inputs and minimize the number of inputs and amount of change involved. Since not all coins are created equal, I may have other preferences (like spend unconfirmed coins first to get rid of them, or not cross inputs between different trading partners). Is there any way I can have more control over the process?

Currently this is not possible with the standard client, other than making separate wallets. There is a patch for coin selection on github, which was very promising. So this feature may make it into a future version.


how to generate bitcoin adddres using seed? Hi i am new to bitcoin all i want to know is how to generate address using mnemonic seed?

let testnet =Bitcoin.networks.testnet;
let keypair =Bitcoin.ECPair.makeRandom({network:testnet});
let address=keypair.getAddress();
let privateKey=keypair.toWIF();
res.json("Public Address  "+ address+ "  "+privateKey)

Using bitcoinjs-lib and bip39. You can install those with npm install bitcoinjs-lib bip39 --save

const Bitcoin = require('bitcoinjs-lib');
const Bip39 = require('bip39');
const Bip32 = require('bip32');

function getAddress (node, network) {
  return Bitcoin.payments.p2pkh({ pubkey: node.publicKey, network }).address
}

const mnemonic = `entire taste skull already invest view turtle surge razor key next \
buffalo venue canoe sheriff winner wash ten subject hamster scrap unit shield garden`;

const seed = Bip39.mnemonicToSeed(mnemonic);

const root = Bip32.fromSeed(seed, Bitcoin.networks.bitcoin);

const child1 = root.derivePath("m/44'/0'/0'/0/0");
const child2 = root.deriveHardened(44).deriveHardened(0).deriveHardened(0).derive(0).derive(0);

console.log(getAddress(child1)); //1ENQm8nEP7sd6dqXbAMYZ4AuqcP8Y7AtR
console.log(getAddress(child2)); //1Hb6Z1uZ1RuZ6GXTvedQ2ETYKYsMc5qynN

You can check the code is working using this website. You might also want to read up a little about BIP32, BIP39 and BIP44. An executive summary below:

The BIP32 describes how you can generate new child keys programmatically from a single key and a few other properties.
BIP39 defines a set of standard words used to mimic a key and how to transform them back to the original "seed" (the key from BIP32).
BIP44 specifies how you should compute the child keys from the parent one. You can see from my code that I used derivePath("m/44'/0'/0'/0/0"); in conformance of its specification.


Where can I buy bitcoins from Ireland without photo ID? My available methods of payment would be laser(Ireland debit card scheme), mastercard, visa or a bank transfer.
I'm a beginner user in Ireland.
I'd also prefer not to have to verify my account with a photo ID.
I won't be spending large sums of money either so the cheaper the better, and the money will be spent pretty much instantly so i'm not too worried about having THE most secure option if it means i'd have to pay more.

Thanks!

I've been using Intersango's service lately, and am happy with it. You can deposit by SEPA bank transfer, no ID required.


Bitcoin-cli getbalance returning negative value I am running: bitcoin-cli getbalance username 1

It is returning -37.01

How is it possible for an account to be negative? Is this a bug or do I need to add stricter security when performing a send to prevent accounts from going negative?

I am running this in daemon mode on debian.

It is possible to an account balance to be negative.

Accounts do not correspond to on-chain transactions 1:1. They are a separate layer within Bitcoin Core. Non-obvious functionality like allowing accounts to go into negative is why they entire account system has been deprecated and will soon be removed.

You should either track separate accounts at an application layer, or use the new multiple wallet system in Bitcoin Core 0.17.0 to create a separate wallet for each account.


Getting salary in BTC in Germany Am I allowed to ask my employer (large IT multinational) if I can receive my salary in BTC instead of EUR according to german law? Would I have to pay income tax if I do not exchange them for a year (tax exemption in place) and would I have to pay VAT for purchases made using BTC?

Am I allowed to ask my employer (large IT multinational) if I can receive my salary in BTC instead of EUR according to german law?

There appears to be an obstacle in law:

  German labour law sets out certain rules when it comes to the payment of employees. An important regulation is § 107 GewO, which states a simple principle: “Wages shall be calculated and paid out in Euro”.

From Salary Payment in Tokens: German Labour Law Considerations

  Would I have to pay income tax if I do not exchange them for a year

Salary is subject to income tax. Paying a salary is not the same as making an investment.

  would I have to pay VAT for purchases made using BTC?

Yes.

  Germany will regard bitcoin as the equivalent to legal tender for tax purposes when used as a means of payment,

...

  When a buyer of goods pays with bitcoin, an article of the EU's VAT Directive will be applied to the price of bitcoin at the time of the transaction, as documented by the seller

From Germany Won't Tax You for Buying Coffee With Bitcoin

(the title may be confusing -- it is contrasting the rules in Germany with those in the US where using BTC to buy coffee means the buyer pays capital gains tax in addition to any applicable sales tax.)


Did Satoshi intend to allow midstate computation to speed up hashing? The design of Bitcoin allows computers to compute a hash with 2 iterations of the SHA256 compression function instead of 3 on all but 1 out of every 2^32 attempts.

When Satoshi chose SHA256d for Bitcoin, did he intend to allow this?

I think Satoshi was not aware that the hashing routine could be optimized by the use of a midstate when he first created bitcoin.

If you look here, you can see that the first version of bitcoin that had the midstate optimization built into the miner was version 0.3.5 (it says 0.3.6 in the post, but you can see where someone quoted him that the post first read 0.3.5). He also says that it was implemented by someone called tcatm.

  Also in 0.3.6, faster hashing:

  - midstate cache optimisation thanks to tcatm

Satoshi mentions tcatm again here when trying to encourage people to upgrade to 0.3.8 by telling them they will get a better hash rate.

It's possible he knew it was possible and just didn't have time to implement it, I guess we'll probably never know for certain. But Gavin Andresen gave a talk on what Satoshi didn't know, and he speculated that Satoshi wasn't a very advanced cryptographer, based on some of the decisions made in bitcoin. As such, he may not have known about the inner workings of the hash function he selected, but just that SHA256d was regarded as a secure hash function.

EDIT: This may be the original post where tcatm proposed the midstate hashing optimization: https://bitcointalk.org/index.php?topic=648.0.


How do I connect my online store to the blockchain? I have an online store for which I want to be able to accept bitcoin.

I believe that what I need is an API that will connect my store to the blockchain. If not, the question below would relate to what I need.

I need a developer who can handle both ends of the project, that is identifying or building the right API to connect to the blockchain, and connecting the API to my storefront. How would I find the right application and a reasonably good developer?

If you want to accept payment by Bitcoin or Bitcoin API in your application then you can use "blockchain.com" 's API in your application. So that you can build function and module as per your requirement and also if you want to build your eCommerce platform from scratch then you can use "CryptoWoo.com".


blockchain webgame - use api or actual blockchain to build database? I am currently designing a blockchain based web game, and part of the game is to display data from the blockchain in table format on the site. The data will be updated peroidically, or in short intervals.

For example, the table will say for btc address A there have been x transactions sent for a total of y btc. For btc address B etc etc

My query is whether you think I shoukd be running these queries to build a website database using an api call, or running my own copy of the blockchain on the web server.

Thanks for any advice.

Use a third-party API if the correctness or accuracy of the data is not important. When the financial data needs to be accurate, using a third-party API is slightly more dangerous because as an intermediary they can return whatever (possibly tainted) data to your service... selectively.

Naturally, weigh this against the costs of maintaining an active bitcoind node such as upgrades, sysadmin maintenance, security, etc. There may also be an option regarding simple payment verification if you do not require the entire blockchain.


Bitfinex - Market order that uses all available When calling the New Order Rest API (V1) to do a Buy order I get an error saying that I have insufficient funds. This is due to the fact that the price has changed off the original calculation.  When doing a Sell one can set the use_all_available which will "post an order that will use all of your available balance." See: https://docs.bitfinex.com/v1/reference#rest-auth-new-order

I'm looking for equivalent functionality which will: Take all the balance you have in a given Symbol (i.e. LTC) and buy as much as you can with it.

Does anyone know if there is something like this or if there's a work around?
My current work around is to recalculate amount again.

Thanks :)

This is a shortcoming of the Bitfinex API.  For example, say you have 0.5 BTC and you'd like to buy as much ETH as you can with it, you need to calculate how much ETH it might work out to and then pray the order book doesn't change between the time of your calculation and the time of the order. The feature to use all available funds isn't a good solution.  Imagine you have 1 BTC but only want to use 0.5 BTC to buy ETH.

Instead, Bitfinex needs to change their system to allow the user to specify the amount of the currency they are using to market buy with.  Or, reverse the tickers so that ETHBTC becomes BTCETH when trying to market sell BTC for ETH.


How do I spend bitcoins from multiple wallets in a single transaction? Using, e.g., the Bitcoin Core command line, how could I spend bitcoins from multiple wallets in a single transaction?

This comment says:

  instead of sending the transaction to the network, you send it to the next person who will add their inputs and outputs and sign them as well, and so on. The last person would then broadcast the transaction on the network.

I assume I use createrawtransaction and signrawtransaction somehow, but how exactly do I actually do this?

cf. Mastering Bitcoin (1st ed.), §"Using Bitcoin Core’s JSON-RPC API from the Command Line", §§"Creating, Signing, and Submitting Transactions Based on Unspent Outputs"

There are currently three different ways to do this: raw transactions, PSBT in 0.17, and PSBT in 0.18. I recommend that you use PSBT in 0.18 as it is the least hassle, but I will describe all three here for you.

Traditionally, you would do this with createrawtransaction, fundrawtransaction, and signrawtransactionwithkey/signrawtransactionwithwallet. One person would have to know all of the inputs that were being used in the transaction or have all of those stored in their wallet (i.e. they have imported everyone else's public keys and/or redeemScripts into their wallet) and then they can use createrawtransaction or fundrawtransaction to create the raw transaction.

createrawtransaction just takes inputs and outputs that are specified by the user and gives the resulting transaction as is (so you need to be careful about fees and change). fundrawtransaction can choose the inputs to use for you using your wallet and it will handle fees and change outputs itself. However fundrawtransaction needs to know all of the information necessary to construct the final transaction (except for the private key, it can just use a dummy signature) in order to correctly estimate the transaction fees, which is why you need to import the public keys and scripts into your wallet.

Once you have the raw transaction, you then send it to each of the other people involved in the transaction. They then sign it using signrawtransactionwithwallet (if the keys and scripts are in their wallet) or signrawtransactionwithkey (if their keys and scripts are not in their wallet). Most people will use signrawtransactionwithwallet. They then send the result back to you where you have to combine all of the signed transactions into the final transaction using combinerawtransaction. Then you can broadcast it with sendrawtransaction.

Instead of sending the transactions out to everyone to sign at the same time, you could send to one person who signs, who then sends to the next person and so on. This would not require combinerawtransaction. The last person would sign and then use sendrawtransaction to broadcast.

This process is kind of bulky and requires that one person knows some (or all) of the information for the inputs being used (except for the private keys).

Since Bitcoin Core 0.17, you can use the various *psbt RPCs to achieve the same thing. With 0.17, the flow is fairly similar to the the raw transaction flow described earlier. You would have to have all of the information for creating the final transaction in your wallet (except for private keys) so that fee estimation can be properly done for coin selection, or you need to know which inputs to use. Either way, you use walletcreatefundedpsbt and specify the inputs you want and the outputs you want. Bitcoin Core will then automatically choose additional inputs if there is not enough to cover the output amount and create a change output for you. Because it needs to also conver transaction fees, it needs to have the same information that you need for fundrawtransaction to be able to estimate fees for the inputs it chooses.

Then you would send the transaction to everyone else who would add their signatures (and other metadata) using walletprocesspsbt. You can also do walletprocesspsbt first before sending the transaction to everyone so that various metadata needed for signing (like the UTXO that is being spent for each input) is added beforehand. Once signed, everyone would send the transaction back to you and you combine them together using combinepsbts Then you create the final transaction for broadcast using finalizepsbt and send the result using sendrawtransaction.

Of course using PSBTs you can do the same thing described above where each person sends the transaction to the next person to be signed instead of sending back to you to be combined.

Again, this process is kind of bulky and requires that one person knows some (or all) of information for the inputs being used (except for the private keys). But it is slightly less likely to result in an error than the raw transaction method. PSBTs also allows you to use other non-Bitcoin Core wallets that support PSBT, and you can use this method with wallets which are not connected to the internet or otherwise do not have the blockchain or the UTXOs that are being spent in the transaction.

However, Bitcoin Core 0.18 actually makes this whole process a lot easier. Bitcoin Core 0.18 introduces a couple of new *psbt RPCs which make it so that one person does not need to know all of the inputs being used and all of the information for each input. The only caveat is that this method assumes that each person has their own outputs that they want to create instead of multiple people pooling together their Bitcoin to make one large output.

With 0.18, everyone would create their own PSBT using walletcreatefundedpsbt. They specify any of their own inputs that they want to use and all of their outputs. Any change outputs will be added, and additional inputs from the wallet will be added to cover the output amount and transaction fee if not enough were specified by the user. Since every user does this with their own wallet, no one person needs to know anything about what the other users have in their wallets.

Then each person would send the PSBT to a designated coordinator who uses joinpsbts to join every PSBT into one large PSBT. This PSBT will have all of the inputs and outputs that each person wants to spend and create. So instead of having many individual PSBTs with their own inputs and outputs, there is now one large PSBT with everyone's inputs and outputs.

This PSBT is then sent back to each person who uses walletprocesspsbt to update the PSBT and add their input information to the PSBT and signs it. Even if a user has an airgapped setup where their private keys are somewhere that does not have access to the blockchain, they can update the PSBT from an online watching only wallet and send the PSBT to the offline machine to be signed.

Once everyone has signed the PSBT, it is sent back to the coordinator who uses combinepsbt to combine all of the signatures and input information into the same PSBT, then creates the final network transaction using finalizepsbt and broadcasts it using sendrawtransaction.

Again, this can be done serially like the other methods described earlier and thus omit the need for combinepsbt.


Blockchain Application I am currently doing a project that requires blockchain to be applied to other systems. I was wondering where I can easily download the blockchain database and which is the best way of understanding blockchain.

Thank you

A block chain is a transaction database shared by all nodes participating in a system based on the Bitcoin protocol. A full copy of a currency's block chain contains every transaction ever executed in the currency. With this information, one can find out how much value belonged to each address at any point in history.

If you are new to Bitcoin or have never worked with 'bitcoind' (the Bitcoin daemon with no user interface) then I suggest you start clicking (and reading) around on these sites:

en.bitcoin.it - A Bitcoin wiki

bitcointalk.org - A Bitcoin Forum

Unless one really dives into the source code of Bitcoin one can't really manipulate (or sometimes even view) a Bitcoin blockchain without running the Bitcoin software.

Most blockchain software is running a form of original Bitcoin software underneath the blockchain software.

If you are looking to try and do something like blockchain.info then I would suggest Abe to start with. Abe draws inspiration from Bitcoin Block Explorer (BBE) and BlockChain.info and seeks some level of compatibility with them but uses a completely new implementation.

If you are looking at Abe like it could be way over your head then try googling "bitcoin blocknotify" or "bitcoin walletnotify".

Block and wallet (and alert) notify is a parameter you can set in your bitcoin.conf file that will make your bitcoin wallet execute a script of your choosing and can pass the script an argument.


Error code -3 when signing message from gui? I tried to sign a message from gui v18 and the debug console without success:
With the popup it shows red text:

  "the entered address does not refer to a key. Please check the address
  and try again"

With the console:

  "Address does not refer to key (code -3)"

the approach was:
- get a fresh public address from the wallet (new receive address)
- paste it into the address field
- type 'foobar' into the message field
- click sign message

in the console i unlocked the wallet (for long enough!) then
`signmessage "pupaddr" "foobar"
both with no success. I double checked the pubaddr (taken from the address field on the right button).

the throw happens here in the sourcecode. The addr. starts with 3... .

The message signing feature in Bitcoin Core only works for P2PKH addresses (which start with 1...). There isn't an established standard for other ones (a few competing proposals exist, though).


What happens if you send Bitcoin to a Litecoin address? Is it lost forever?

What about the reverse: sending Litecoin to a Bitcoin address?

A Bitcoin or Litecoin address consists of:

a prefix byte
a 160-bit hash of a public key
a 32-bit checksum

all base-58 encoded.

Bitcoin and Litecoin use different prefix bytes; this is why most Bitcoin addresses start with 1, while most Litecoin addresses start with L.

When you use a Bitcoin client to try to send money to an address, it should perform a number of checks on that address.  One of those checks would be the prefix byte.  When it notices that the address doesn't have the correct prefix byte for Bitcoin, it should barf, complaining that you have specified an invalid address.  It wouldn't try to create a transaction at all.

So for practical purposes, the answer to the question is "you can't do it".

The same applies if you try to send Litecoins to a Bitcoin address - the prefix byte would not match the Litecoin client's expectation, so it would reject the address and refuse to create a transaction.

In theory, if you somehow used a broken client that did not check the prefix byte, it might actually generate a transaction whose output specified the 160-bit hash of the public key corresponding to the Litecoin address (call this hash value H).  The hash is the only part of the address that is actually used in creating a transaction.  Since all possible 160-bit numbers are potentially valid hashes, there would be no way to tell that H had come from a Litecoin rather than a Bitcoin key, so this would be a valid Bitcoin transaction.  (I got this wrong in a previous version of the answer.)  The transaction could only be spent by a Bitcoin transaction, signed with a private key whose public key had the hash H.

Now I believe (though I am not completely sure) that Litecoin uses exactly the same ECDSA signature algorithms as Bitcoin.  Therefore, if you (or someone else) has the private key for the Litecoin address, both Bitcoin and Litecoin should agree as to what the corresponding public key is, and agree that it has hash H.  So in principle, the private key holder would be able to import this key into a Bitcoin wallet and use it to spend the coins sent to the Litecoin address by the broken client.  (They couldn't import the key directly, again because the prefix byte would be wrong; but they could decode the base58-encoded Litecoin private key string, extract the 256-bit number which is the actual private key, prefix it with the appropriate Bitcoin prefix byte, recalculate the checksum, and re-encode the whole thing in base 58.  The result would be suitable to import into a standard Bitcoin wallet.)

If I am wrong about this, and Bitcoin and Litecoin handle keys and signatures differently, then most likely there would be no feasible way to find a private key whose public key's hash (computed by Bitcoin's rules) was equal to H.  In that case, the coins sent to that address would be lost forever.


bitcoin rpc api createrawtransaction with python returns -3: Expected type array, got object experimenting with JSON RPC API using bitcoinrpc.authproxy for python.

so far it works in all instances accept when i try to create a raw transaction.
somewhere along the way im passing parameters in wrong format.

i created helper methods to create my inputs/outputs like this:

def getTransactionJsonInput(self, sourcetransaction) -> str:
    return {"txid": sourcetransaction['txid'] ,"vout":sourcetransaction['vout']}

def getTransactionJsonOutput(self, new_address, amount, returnaddress, returnamount) -> str:
    return {
        new_address: amount,
        returnaddress: returnamount
    }

and when i print my call to createrawtransaction it appears to be correct

    print('TRANSACTION inputs', [input], type([input]))
    print('TRANSACTION outputs', output, type(output))
    return svc.createrawtransaction(input, output)

  TRANSACTION inputs [{'txid': 'sourcetransactionid', 'vout': 1}] <class 'list'>

  TRANSACTION outputs {'destinationaddress': 0.012, 'changeaddress': 2.56559703} <class 'dict'>

error:

  bitcoinrpc.authproxy.JSONRPCException: -3: Expected type array, got object

solution

thanks to @m1xolyd1an i was steered in the right direction. All that was missing in my implementation was adding [] around inputs. i added them in print statement but not in the actual call!

before

return svc.createrawtransaction(input, output)

after

return svc.createrawtransaction([input], output)

new result:

  new transaction:  0200000001005134d493cb536a5000b491b0b6dbca6c5187eec67ffb8769fdedac9ec25db40100000000ffffffff02804f12000000000017a914190150e1a961a2509b1d48c4d6cf6b644454cd968757ca4a0f0000000017a91496711dceda7240a6c492b2fabc5d44ab5d4bd19e8700000000

You are providing it an Object in JSON, not an array just as the error states.

 return {"txid": sourcetransaction['txid'] ,"vout":sourcetransaction['vout']}

I would try creating it from a dictionary and then adding it to a list instead of building it from a string, something like:

>>> inputs = {}   #create the dictionary
>>> inputs["txid"]=sourcetransaction['txid']  #add the value to the dictionary key 'txid'
>>> inputs["vout"]=sourcetransaction['vout']  #add nout value to key 'vout'

>>> inputs
{'txid': 'a9d4599e15b53f3eb531608ddb31f48c695c3d0b3538a6bda871e8b34f2f430c', 'vout': 0}

>>> inputsList=[inputs] #add dictionary input to list
>>> inputsList
[{'txid': 'a9d4599e15b53f3eb531608ddb31f48c695c3d0b3538a6bda871e8b34f2f430c', 'vout': 0}]

Also noted in the example from the source:

def createrawtransaction(self, inputs, outputs):
    """
    Creates a raw transaction spending given inputs
    (a list of dictionaries, each containing a transaction id and an output number),
    sending to given address(es).
    Returns hex-encoded raw transaction.
    Example usage:
    >>> conn.createrawtransaction(
            [{"txid": "a9d4599e15b53f3eb531608ddb31f48c695c3d0b3538a6bda871e8b34f2f430c",
              "vout": 0}],
            {"mkZBYBiq6DNoQEKakpMJegyDbw2YiNQnHT":50})
    Arguments:
    - *inputs* -- A list of {"txid": txid, "vout": n} dictionaries.
    - *outputs* -- A dictionary mapping (public) addresses to the amount
                   they are to be paid.
    """
    return self.proxy.createrawtransaction(inputs, outputs)


What has happened with the investigation of mtgox.com? Why hasn't there been any update since 9th of September 2015? What has happened since then?

AFAIK, the latest official news is the article After the CEO’s Indictment the Great Mt. Gox Bitcoin Mystery Deepens from the 14th of September 2015, and these two tweets:

  PDG #Français de MtGox,banque #BTC basé à #Tokyo sera condamné sans jugement sur des charges n'ayant aucun lien avec disparition 50,000,000$ – @NathalieStucker (Jan 7th 2016)

and

  30歳のフランス人が6ヶ月間以上東京の #刑務所 に #永遠 と取調べられてるため、#外国メディア は日本の #司法制度 に #疑問。23日間の #保管期間、#人権 にかかわる。– @NathalieStucker (Jan 9th 2016)

You can follow Nathalie Stucky on Twitter @NathalieStucker and as a contributor on Daily Beast, she seems to be the only one interested in truth and justice on this topic.

Now a few unofficial news, AFAIK Mark Karpelès hasn't been allowed any visits, not even contacts with his family and is not allowed to use a computer either.
 He already lost 35 kg but still hasn't accepted to be the scapegoat, which seems to be why he's still detained after more than 4 months, without any trial or official charges…


Where did Bitmain get the "Antminer" name from for all their ASIC miners? Does anyone by chance know? Can't seem to find this anywhere and this question popped into my head.

Presumably (I'm not sure, this is an educated guess) they called it an antminer because they have very many of them, all set to do a single thing and doing it well. One could compare their mining pool to an ant hive, where each mining ASIC is an individual ant, foraging for food.

This is a very common metaphor, because ants are fascinating creatures, whose actions are completely governed by very simple rules, which cause truly incredible emergent behavior. See: Ant Colony Optimization for a good example of this.


How does bitcoin functional test framework work? Could someone explain how and where in the code the bitcoin test framework calls map to C++ bitcoin core code or RPC calls such that regression suite tests the bitcoin core functionality?

Background and more details
I am writing a blockchain application and was thinking of how I can do regression while I keep developing. I wanted to leverage the design used by bitcoin (or any other blockchain application). I would expect that framework would call either C++ classes in bitcoin core directly or use RPC from python scripts such that features are tested.

I spotted that bitcoin functional tests are written in python scripts whereby test_runner.py calls a bunch of scripts testing specific features But I cannot spot in the bitcoin framework as to where it eventually calls actual bitcoin core c++ code or RPC.

Appreciate your help in spotting the code in python scripts in the framework that does it.

The functional tests test the RPCs. The unit tests test the C++ code directly by calling the functions.

The functional test frameworks uses a version of python-bitcoinrpc which can be found here. This library allows the test framework to call RPC commands as if they were python functions; authproxy handles the conversion to HTTP POST requests for the RPC server. So when you see lines like self.nodes[0].getblockchaininfo(), it is actually calling the getblockchaininfo command on node0. You will see many lines like this throughout the functional tests.


What happens if a monopoly grows in Bitcoin mining and payment processing? What happens if a monopoly grows in Bitcoin mining and payment processing?  Here is a scenario that I have been thinking about. Some big corporation, like the Bank of Amerika, decides that Bitcoin is the future and starts to buy thousands of graphic cards. At the same time the payout for solving a block decreases and many small Bitcoin miners figure the cost of electricity and time is not worth it anymore. But the big corporation is subsidized by the present financial system and shifts profits from banking services into paying for Bitcoin processing until only it and a handful of other large banks control the majority of the Bitcoin network.  What happens then?  Do they start raising fees and requiring a credit card number to process a transaction?

In that scenario, the corporation could:

Launch a 51% attack at a whim
Pretty much control the Bitcoin economy, driving the prices up or down how it sees fit (at least until it spends all of their Bitcoins)
Control which transactions get included in the block or not. This could require one to use their specific client and thus gain more control over the network
Have a big impact on the Difficulty, as it could turn its machines on and off
Control the rate at Blocks are mined (for example, holding onto a solved block for certain amount of time before broadcasting it)
Control who gets to see the most recent Blocks. With this, they could hold out a long chain of solved Blocks for their own client, and when a standard client would finally mine a block, they could just release a couple old blocks to invalidate that chain

All in all, if you own majority of the hashing power, you can pretty much dictate your own rules, up to what the Protocol allows.


Bitcoin Address Received/Balance values differ from one explorer to another Recently I've been looking into experimenting with querying the blockchain. I am running bitcoin-core, full node locally and updated.

I am mainly interested in querying watch-only addresses, each address is saved under a unique label (one to one). After rescanning, I try to query a randomly chosen address with "getreceivedbyaddress" (in this case: 367f4YWz1VCFaqBqwbTrzwi2b1h2U3w1AF )

bitcoin-cli displays a value of approx. 171,500 BTC
blockexplorer.com displays the same value as the bitcoin-cli
blockcypher.com and blockchain.com display nearly the same value - 33,000 BTC (which could be due to latency issues)

I would like to know if this is an issue from my end or if there's something I do not understand.

When I looked,

one site said there were 120612 transactions
one site said there were 120614 transactions

one site alerted me that there were unconfirmed transactions

I surmise this is a highly active address and that different sites may have differing delays and differing thresholds for confirmation.

As Raghav noted in a comment:

  another factor is that some explorer count change sent to the same address as an additional incoming btc tx, while others (blockchain.info) don't. It would explain such a large difference in this case, since the address seems to output a lot of change to itself.


Generate private key from a bip-39 seed phrase? I'm able to generate a new private key and associated public addresses using bitcoin-core, but what I really want to do is generate a new private key from a 24 word seed phrase. I'm not sure how to go about this and I have not been able to find any examples.

BIP-39 Word list:

https://github.com/bitcoin/bips/blob/master/bip-0039/english.txt

Current code:

var bitcore=require("bitcore-lib");
var buffer=bitcore.crypto.Random.getRandomBuffer(256);
var hash=bitcore.crypto.Hash.sha256(buffer);
var bn=bitcore.crypto.BN.fromBuffer(hash);
var pk=new bitcore.PrivateKey(bn).toWIF();
var address=new bitcore.PrivateKey(bn).toAddress()+'';

If I understand correctly I will generate a hash from 24 randomly selected words (from the BIP-39 word list) then use that to generate a private key. What are the steps and format for hashing the seed phrase?

https://github.com/iancoleman/bip39

"A tool for converting BIP39 mnemonic phrases to addresses and private keys."


Have I lost all my money to a typo? I tried to send my Bitcoins to my wallet earlier but have managed to miss the last two digits off the address when copy/pasting. The payment was sent straight away but has obviously not arrived, is there anything I can do? I have a horrible feeling I just lost all of my money to a typo, any help will be gratefully received.

To include details from your comment: you were trying to send coins from your account at some sort of online marketplace.

Losing coins because of an address typo is generally not supposed to happen; however, preventing it requires that the marketplace has designed their software properly.  The fact that it got as far as it did suggests that they have screwed something up.  Whether the coins are actually lost is something you have to find out from them.

It will help to explain a little about the Bitcoin address mechanism.  A standard Bitcoin address (1xxxxx...)  has encoded within it a 160-bit public key hash, and a 32-bit checksum (actually computed via another hash).  When software wants to send coins to an address, it should normally:

decode the pubkey hash and checksum
verify that the pubkey hash and checksum match
generate a transaction sending out the desired number of coins, listing the pubkey hash as the destination (the checksum is not used after this point)
post this transaction on the Bitcoin peer-to-peer network
wait for the transaction to be confirmed.

In order for the recipient to eventually spend the coins, they have to be in possession of a private key whose corresponding public key has the same 160-bit hash as contained in the address.

Step 2 is where your typo should have been caught (barring extremely bad luck; see case 1 below).  After this point, no more checking is possible: there is no way for anyone to determine whether a given 160-bit string corresponds to a private key, unless they know what the private key is.  I would think any reasonable software design would perform step 2 as soon as you typed in the address, display an error, and refuse to proceed until a corrected address was given.  The fact that this didn't happen is a bad sign; it suggests that the marketplace's software is not well designed.  But we don't know what it actually did do.

So there are a few possibilities for what happened:

You were extremely unlucky, and your typo'ed address decoded to a hash and checksum that matched each other.  The probability of this happening randomly is about 1 in 4 billion.  You can check whether this is the case by entering your typo'ed address in a block explorer site like http://blockchain.info and seeing if you don't get an error message.  In this case, the marketplace may have gone through the whole process described above, and sent coins to a hash that doesn't correspond to your private key.  The transaction would be valid and been confirmed, but in this case the coins are now lost and nobody will ever be able to claim them.  If so, the marketplace should be able to give you a transaction ID for the transaction they created; you would be able to independently verify that the transaction exists, was confirmed, and corresponds to your erroneous address.  There isn't anything the marketplace can do to avoid this case (except maybe asking you to type the address twice).
The marketplace performed step 2 at a later stage of their processing, and discovered the error in your address.  In this case, they never created a Bitcoin transaction; they still have your coins, and should be able to re-credit your account.  Ideally they would do this automatically, but you might have to ask.
The markeplace decoded a hash from the address you gave, but never performed the step 2 check, and instead created a transaction sending coins to the incorrect hash.  Like in case 1, the coins are now lost, and they can send you a transaction ID which proves it (you can compute for yourself what the incorrect hash is, and verify that the transaction sent coins there).  Unlike case 1, this case would clearly be the marketplace's fault, for not performing the step 2 check which would have caught the error.  The right thing for them to do in this case would be to refund your coins out of their own pocket.  Of course, they may or may not actually choose to do that (especially if they are "shady").
The whole thing was a sham; the marketplace made it look like they were sending you coins, but in fact had no intention of actually doing so.    There isn't much you can do in this case except to try to pursue legal action (good luck with that).


BTC transaction issues Respectfully requesting to look into this transaction. Did it got confirmed or not? is been 5 days now.
Thanks
18MJieFJcDiFbAsvSxe5iCaBAYsikgJta6

You did not specify any transaction id so we can't look into the transaction.

You can see however, that this bitcoin address has received bitcoins, and they have been spent again.

You can see the transactions of any bitcoin on a block explorer such as blocktrail:

https://www.blocktrail.com/BTC/address/18MJieFJcDiFbAsvSxe5iCaBAYsikgJta6


Can leased out nxt coins still be used or do you have to wait for it to expire? When leasing out your nxt balance to another account, can you still use those coins in your main account? Or do you have to wait for it to expire before you can use it again?

According to https://nxtwiki.org/wiki/Account_Leasing:

  Your balance never leaves your account

  Your funds are still on your account after you lease them. They are    still available for use: you can spend them, receive more etc. The only thing given is your forging power, by consequence while your balance is leased, you will not be able to forge on your own.

Your can spend your coins, but when you do your leased forging power will diminish.


Should I be running Bitcoin Core or Bitcoin-XT? I just read about Bitcoin Core and Bitcoin-XT, and I want to know what is the difference between Bitcoin Core and Bitcoin-XT?

And which is better Bitcoin Core or Bitcoin-XT?

The two pieces of software, Bitcoin Core and Bitcoin-XT, are very similar. Bitcoin-XT is actually just a fork of Bitcoin Core with some features added that Bitcoin Core developers didn't deem appropriate, such as a larger block size (BIP 101) and relaying of double spends.
Bitcoin Core is more up-to-date with all of the work that the community doing. Additionally, Bitcoin-XT now has a different consensus protocol regarding the maximum size of blocks. There has been much debate within the bitcoin community about if/how/when to increase the artificially imposed block size limit (of 1 MB), and one attempt to resolve this debate is being done through Bitcoin-XT.
The Bitcoin-XT README.md has these notes on how it is different than Bitcoin Core:

Support for larger blocks. XT has support for BIP 101 by Gavin Andresen, which schedules an increase from the one megabyte limit Bitcoin is now hitting.

Relaying of double spends. Bitcoin Core will simply drop unconfirmed transactions that double spend other unconfirmed transactions, forcing merchants who want to know about them to connect to thousands of nodes in the hope of spotting them. This is unreliable, wastes resources and isn't feasible on mobile devices. Bitcoin XT incorporates work by Tom Harding and Gavin Andresen that relays the first observed double spend of a transaction. Additionally, it will highlight it in red in the user interface. Other wallets also have the opportunity to use the new information to alert the user that there is a fraud attempt against them.

Support for querying the UTXO set given an outpoint. This is useful for apps that use partial transactions, such as the Lighthouse crowdfunding app. The feature allows a client to check that a partial SIGHASH_ANYONECANPAY transaction is correctly signed and by querying multiple nodes, build up some confidence that the output is not already spent.

DNS seed changes: bitseed.xf2.org is removed as it no longer works, and seeds from Addy Yeow and Mike Hearn are (re)added to increase seed diversity and redundancy.

So, if you support these changes and/or the possible future changes on the consensus-block-size-limit, run Bitcoin-XT. The releases are available here: https://github.com/bitcoinxt/bitcoinxt/releases


Which Bitcoin mixer has the largest pool of customers? As the title of the post states, which current Bitcoin mixer has the largest pool of customers?

I understand that the larger the customer base of a Bitcoin mixer, the more anonymity the mixer will provide.

you can always send coins to silkroad and withdraw them. i would think that they have a large pool since basically all coins that go through there get washed