Why is there no such thing as a redirected, forged, or fake transaction?

The Bitcoin protocol follows a Unspent Transaction Output system to track the existence and state of all Bitcoin in the system. These are known as UTXOs.

All transactions that transfer Bitcoin do so by consuming one or more UTXOs, and create one or more new UTXOs. The only exception to this is the Coinbase transaction, which is limited to being the first transaction in a block, and is only allowed to create UTXOs that total block reward + block fees or less.

Due to this basic structure of a transaction, it is impossible to create a bitcoin transaction that spends non-existent bitcoin. As the UTXOs being consumed do not exist, the transaction is rendered invalid the moment it is created.

Although this is impossible, why it is impossible is not immediately obvious to people unfamiliar with the details of how Bitcoin works - thus, many people, especially newcomers to the space, seek out such things as a way to quickly get some Bitcoin at no or low cost. Several scammer groups are aware of this, and put out videos showing edited block explorers/wallets that seem to allow them to initiate fake transactions.

These groups then offer to give you access to this software for a small fee, or just let you download it for free - however, not only does it not work as advertised, most of these programs are trojan horses, and contain code to steal Bitcoin wallets on your system, or grant the scammers persistent remote access to your machine.

Answering each point directly:

  Why can I not just make up bitcoins?

As all bitcoin in the system are the result of either a coinbase transaction, or the outputs of a transaction that moved previously extant bitcoin, it is not possible to introduce new Bitcoin into the system without being detected. Any UTXO at any point of time must always be traced back to one or more coinbase outputs.

  Why will fraudulent transactions not get relayed on the network?

All well behaved nodes on the network validate transactions before accepting them to their mempool, or rebroadcasting them further - part of this validation is checking all utxos in the transaction against the node's own list of valid utxos. If the transaction claims to spend a UTXO that does not exist in the node's list, the transaction is deemed invalid and dropped.

  Why can only the owner spend their funds?

Standard Bitcoin addresses rely on one (single key addresses) or more (multisig addresses) private keys. The public keys corresponding to these private keys are encoded into the address itself, inside its locking script (also known as the scriptPubKey). During the evaluation of these scripts, the signature on that input is matched against the embedded public key(s). If the signature does not match, the transaction is deemed invalid.

Note that it is possible to create outputs with no "owner" - The Bitcoin script does not require all locking scripts to include a key check, and it is possible to construct a non-standard script that requires no signatures to spend. However, no consumer wallet does this, and essentially all addresses a normal user will encounter will be backed by one or more private keys.

  Why can a third party not alter the recipients of a transaction?

Standard transactions are signed using the SIGHASH_ALL signature flag. This means that the signature for any one input signs all inputs and outputs (in effect, signing all material aspects of the transaction). If any input or output is altered, removed, or otherwise changed, the signature is no longer valid as the data it signs has changed.

It is possible to construct a transaction using other signature flags, as described in my blog post here. However, once again, no consumer wallet uses anything except SIGHASH_ALL.

  What prevents a miner from taking the funds of your transaction when creating a block?

Similar to the previous point, a miner is also unable to alter the outputs of your transactions due SIGHASH_ALL signing the entire transaction. If a transaction is intentionally signed with SIGHASH_NONE, a miner could very well take the funds. However, as no sane wallets performs such a signature, this does not happen.


How do I restore my Multibit wallet without seed words?

In 2013, MultiBit was not using Hierachal Deterministic (HD) wallets. The latest version is MultiBit HD. If you want to use the older version you can use MultiBit Classic and that should let you import your multibit.wallet file.


repeated hashes? most of them use just two repeats.

There are not many other, the vast majority just use two calls to some cryptographic hash function. But a primecoin and cuckoo hash cycle has been suggested. Primecoin arguably searches for some sequence of prime numbers, yet the utility of the result is questionable. On the orher hand the cucoo cycles in hash tables weren't implemented in a practical crypto coin.


Does Electrum store my seed in their server?

Electrum does not store your seed, the server is run by volunteers, and you can run your own if you wish.

You needn't take my word for it: Both Electrum and electrumx are open source, and you can verify the functionality, and build a version from code you have verified.


Eltoo channel - can opening be off-chain

I think you have answered your question yourself in the last question that you raised. The problem with not publishing Tu0 is that the funder of the channel could double spend the input of Tu0 and in that case "steal" all the money from the channel. so with eltoo we still need the bitcoin network / blockchain give proof of the existence of funds in the 2-2 multisig


1) "getmininginfo" gives the difficulty right now, and "getblocktemplate" gives the difficulty for the next block

That is correct. getmininginfo gives the diffculty of the block at the current blockchain tip, and getblocktemplate gives the target for the block to be mined on top of the current tip, i.e. the next block.

  under the assumption that this block will be solved within the next second.

There is no such assumption. The difficulty doesn't change by the second, it only changes at the end of each difficulty adjustment interval. If you are fully synced, you will always know what the difficulty of the next block will be. The calculation is completely deterministic and any block that has your current tip as its previous block will have the exact same target.


Hash rate of "Antminer S9" in "Antpool.com" is ZERO

I found the problem. In fact, although the PING to Antpool.com was successful; however, the network used a proxy causing problem of connecting successfully to Antpool.com. So, after changing the network I could see the hash rate in my dashboard.


How to get all cryptocurrencies real-time statistics with no limit and free?

https://blockchair.com/ is pretty good for data analysis on 9 different blockchain it allow you to filter by lots of settings like date, reward, hash, output etc... You can also directly download the data they offer in different format.

And they also have an API: https://github.com/Blockchair/Blockchair.Support/blob/master/API_DOCUMENTATION_EN.md


Yes
Most of crypto-libraries have the verify method. You can pass the compressed public key as an input. BTW, it is possible to recover Y part from compressed public key
No. For multisig P2SH (and any other type) we (a)calculate the digest, (b)sign this digest with private keys and (c)create the final transaction from all parts. We do not need to use any signatures on step (b) as a source for calculations

  Any other thing that I should look when signing a transaction?

How to redeem a basic Tx?


How many shares will be found for a given hashrate?

One difficulty-1 share takes on average 2^32 = 4.3 billion hashes to find.

If your hashrate is X GH/s, then in one day the number of difficulty-d shares you'll find is

(X * 1000000000 * 86400) / (2^32 * d)

Or simply

20,000 * X / d


I don't think bitcoin charts is exactly what you're after. If you MUST use it then you'll find the information you're looking for at http://api.bitcoincharts.com/v1/markets.json however this includes all markets and not just mtgoxUSD (API overview is here).

I would suggest using the mtGox API directly, information can be found at the bitcoin wiki and this explains exactly how you could go about getting current volume etc.

To get the volume you would need to either look at the JSON displayed on this page http://data.mtgox.com/api/1/BTCUSD/ticker or parse it into whatever language you're processing this data with.


Is the "double geometric" payout method for pooled mining fair to part time miners?

Yes. If you mine at a given point in time, you do not know when a block will be found, and thus your reward for shares you submit is a random variable. DGM is constructed so that the average reward for a submitted share is always equal to what you would get from it in PPS (assuming equal fees). The total reward for all shares you submit is additive - so it follows that the average reward you get in DGM is equal to what you would get in PPS, no matter what is your mining pattern.

However, the reward you will get is random and has some variance, and the variance is greater if your mining is intermittent. The exact degree of this depends on the parameters used by the pool.

More background information about mining pool reward methods can be found in Analysis of Bitcoin Pooled Mining Reward Systems.


How to import private key of a P2SH-P2PKH address to Bitcoincore 0.18.0?

Since Bitcoin Core 0.16, every private key gives rise to a supported P2PKH (1...), P2SH-P2WPKH (3...), and P2WPKH (bc1...) address.

All you need to do is import the private key with importprivkey; the corresponding segwit address will automatically be supported.

A more reliable method is using importmulti, where you specify the address you want together with the private key; if they mismatch, or information is missing, it will complain (since 0.18).


Have 10 of 12 of my mnemonic along with the BTC address, how can i automate recovery?

There do exist tools for this sort of situation. For example:
btcrecover

btcrecover is an open source Bitcoin wallet password and seed recovery tool. It is designed for the case where you already know most of your password or seed, but need assistance in trying different possible combinations.

Seed Savior / mnemonic-recovery (courtesy of MCCCS)

A tool for recovering BIP39 seed phrases.
[...]
Enter your seed phrase into the 'BIP39 Phrase' field. If a word is missing or unknown, please type "?" instead and the tool will find all relevant options. If a word is wrong, the tool will try to suggest the closest option.

I don't know if they work or just steal your money, so I'd only use downloadable tools that can be run on a disconnected PC.


Are there any _severe_ drawbacks of bitcoin justifying all the alternatives?

I don't think there are severe drawbacks of Bitcoin. Certainly none that other coins are solving.

However, Bitcoin has certain properties that could be replaced with some other. Most altcoins to just that. Popular properties that altcoins change are:

replace PoW with something else

Some altcoins do not use a PoW mechanism or use a hybrid mechanism. PeerCoin (originally named PPCoin) was the first altcoin to use the Proof-of-Stake mechanism, which basically requires miners to hold a certain amount of currency in order to mine new. PeerCoin uses a hybrid of PoS and PoW. Nxt is an altcoin that uses pure PoS.

the PoW algorithm

Bitcoin uses SHA-256, which is a hash algorithms that almost entirely requires CPU cycles to calculate. This means that it is easy to create custom hardware to perform this calculations. There are many altcoins that use Scrypt as the PoW algorithm. Scrypt is more memory-intensive and therefore harder to implement in custom hardware. The first altcoin to implement Scrypt is Litecoin. Primecoin requires miners to calculate large prime numbers as a PoW mechanism.

the total amount of coins that can be mined

Bitcoin has a 21 million coin limit. Some altcoins raise this limit, such as Dogecoin, others lower it, such as 42.

the rate at which new blocks are created

Bitcoin blocks are mined at an average rate of one block every 10 minutes. Many merchants require that a transaction has been confirmed by several blocks before they accept it. With a confirmation time of 10 minutes (in fact, the recommended amount of confirmations to wait for is 6) can be quite cumbersome in certain use cases. Litecoin has a confirmation time of 2.5 minutes.

the time it takes before the maximum amount of coins is created

Block rewards usually have a halving time. Every halving time the block reward halves until it is too low to represent using the maximum precision and it becomes zero. With Bitcoin it will take until 2140 until the block reward becomes zero. Some coins shorten this period. Sometimes they shorten it so much that the creator (who mines first, of course) is accused of pre-mining because he can mine very fast and easy in the beginning of the existence of the coin.


I'd say in the src/crypto folder: https://github.com/bitcoin/bitcoin/tree/efb4383ef6c69e801ddca160a53e7fb4ee8b156a/src/crypto


Bitcoin Public Key To Address Uncompressed

You're hashing the string representation of things, not the actual hash itself. Hash the bytes of the hash, not the bytes of its string representation.

All of the should operations are on the bytes themselves, not the hexadecimal representation of those bytes which is what you have done.


It is not really the Proof of Work which prevents double spends but rather the blockchain itself which prevents double spends. The Proof of Work is just one aspect of the blockchain.

For a transaction to be considered final, it must be in the blockchain. Otherwise it could disappear forever and everyone forgets about it. For a transaction to be added to the blockchain, it must be included in a block, and miners will do a Proof of Work for the block. In order for the transaction to be included in a block, the outputs that it spends from must have not been spent by any other transaction in the blockchain nor by any other transaction in the block. If such an other transaction exists in the blockchain, then the block will be invalid.

It is this process of including transactions in blocks which avoids double spends. It essentially establishes an order and says "this transaction is the real transaction, all others which spends any of the outputs which this transaction spends are fake".

The proof of work mechanism exists in Bitcoin because that is what makes the blockchain immutable. A valid proof of work means that a miner is proving that they did a certain amount of work, on average, in order to produce a block. In order to replace that block, someone else must also do about the same amount of work for that block. If someone wanted to modify a block in the blockchain and have everyone accept it, that person must perform the same amount of work that went into creating the block, then do the same for every single block that follows it because those blocks would be invalid since a block in their history has changed. This makes the blockchain immutable; the amount of work required to rewrite history is considered to be infeasible and much too costly to do practically. That is what the Proof of Work is for.


It doesn't seem right. I wouldn't trust them. I would suspect fraud.

  Financial Department Bitcoin

As I'm sure you know, The Bitcoin currency and Bitcoin network is peer to peer and has no departments. So no financial departments.

In normal English, or business English this phrase doesn't make much sense. Some kind of business would have a financial department but those sorts of departments are not usually split by currency. Generally there would be an accounting department that might communicate with creditors and debtors, there might be some kind of sales department or customer services department that communicates with retail customers.

  my trading account

If you have an account you are dealing with one of the many thousands of businesses that make money by selling services to people who want to invest or trade in Bitcoin. There are lots of fraudulent businesses that are just invented to trick people out of money. There are also some genuine businesses of this sort but many people find it hard to tell genuine businesses from fraudulent ones.

Finance departments are usually different, here's one definition:

  Finance Department is the part of an organization that is responsible for acquiring funds for the firm, managing funds within the organization and planning for the expenditure of funds on various assets.

So in most businesses - the finance department mostly manages internal matters - it is generally not one that routinely interacts with retail customers.

For example a car manufacturer would have a finance department that might obtain funds for a new factory. They might not routinely be involved in selling cars to distributors and certainly not involved in selling cars to car-drivers.

Of course businesses are free to organise themselves as they wish and can name their departments whatever they want.

  This department wants to pay me bitcoins for a fee and I don't know if this is real?

If the fees were not made very clear right at the start, before you placed any money in this trading account -- then you are very likely the victim of fraud.


During transaction getting 'Insufficient funds' message from Bitcoin core

we are using the following command sendfrom "emdad" "19aVGaNfWdZYMgCpMx7tKDXrxeddysddd"

The account system is deprecated because it has behavior which most people find unexpected, leading to a lot of confusion. Despite the fact that getbalance "emdad" returns 10.44 BTC, you do not actually have that much BTC in the wallet, you only have the 0.2692 BTC which getbalance and/or getwalletinfo showed. That is why you cannot spend more than 0.27 BTC, because you do not have that much.

Note, transactions need to pay a fee too, so you can't send the entire wallet balance as a transaction output, you would only be able to send slightly less than the amount given.


What happens if hash rate decreases rapidly?

Yes, it could. It's not very likely, but it could happen.

However, one thing to keep in mind is that Bitcoin is incredibly resistant to these kinds of problems. Everyone who participates in the Bitcoin network has an incentive to keep that network useful. So a new client with a different difficulty algorithm could be released in a few days and the network transitioned in less than a week if needed. The difficulty adjustment could be changed if it needed to be.

For one thing, the "6 confirmations" rule is way overkill. People could compensate just by accepting 4 confirmations for transactions under $10,000 or the equivalent.

Ideally, people would see this risk coming several months away and could deploy a fix before it was needed. If circumstances in any way suggested that this was a realistic possibility, even in the absence of an actual attack a community consensus and transition plan could be developed and implemented. Alternative difficulty algorithms have already been proposed and even implemented (in other block chains) that don't have this issue.

Right now, I think such a change would be a bad idea. The problem is very unlikely, and any mass change in the logic of Bitcoin could undermine confidence in the long-term stability of the system. People might think "if they change the difficulty algorithm today, maybe they'll change the Bitcoin generation rate tomorrow".


Why is it safer to keep your bitcoins offline than online on Coinbase?

Let's assume you keep your bitcoins on the exchange for 5 years. If the company behind the online wallet goes bankrupt, is hacked, or is malicious, you lose your bitcoins. If you kept them on a hardware wallet and kept the mnemonics in another, safe location, you can still recover them in case of fire, disaster, turmoil.

Mt.Gox taught us that trusting in another's private keys for your holdings is not a good idea. Many of the people who lost hard in that episode are still waiting for a reimbursement.


How would interest and fractional reserve banking work in a limited money supply?

It doesn't matter very much because the economy can trivially create substitutes for currency. Anything that has the same capabilities as currency (fungible, easily exchanged, limited supply) can also serve as currency.

A good example would be a Mt. Gox code. Mt. Gox may or may not have 100% reserves, but it doesn't matter. A Mt. Gox code for 100 Bitcoins is basically as good as 100 Bitcoins. If you don't fully trust Mt. Gox, maybe it's as good as 99.5 Bitcoins.

Also, you can "print money" without actually being able to produce currency. For example, say I want to buy a car today and need 2,500 Bitcoins to do so. If someone loans me 2,500 Bitcoins in exchange for an insured IOU to pay 2,600 Bitcoins in six months, the 2,500 Bitcoins I borrowed to buy the car are still in circulation. But there is also now an IOU in circulation that is also worth 2,500 Bitcoins. As that note comes closer to maturity, it's value will go up. So just by time passing, the effective number of Bitcoins in circulation will go up.

This is bad news to the people who don't like the way a modern economy works, oppose fractional reserve banking and currency controls, and think that Bitcoins will bring on a new economy where banks can't create money. But I think it's pretty obvious that the same kinds of things will happen.

The whole Bitcoin system itself is an example of creating money out of thin air.


Push deposit notification through HTTP requests

Bitping.net is the new service that replaces BitcoinNotify and can provide the service you are requesting.


How bitcoin transaction fromat design can be explained?

Why is there bitcoin address in the transaction, when the bitcoin script already contains the pubkey hash?

Contrary to popular belief, this is not true. Addresses are not part of transactions at all, nor are they part of the protocol. The address is only used to encode the pubkey hash or script hash which is then used to create the output script.

  Why isn't the amount a part of the script?

It does not need to be. The script is a program, it does not care about the amount.

  Why does bitcoin script allow to sign only parts of the transaction?

To allow for special transactions where only part of the transaction needs to be signed. This allows people to do things like anyone-can-pay transactions or for people to sign only for specific outputs created by the transaction.


I sent it straight to another site

Evidence suggests not.

At the time of writing, none of those addresses has any history of transactions in the public blockchain for Bitcoin (BTC). The second address 8usk...TLnj does not appear to be a valid Bitcoin P2PKH, P2SH or Bech32 address

Therefore the "site" you "withdrew" Bitcoin from, or your subsequent "sent it" (if a separate transaction), did not actually create a transaction (or at least, not a transaction that was both valid and had a sufficient transaction fee).

Consequently the money is still in its original location.

You can check addresses and transaction-IDs at any public "blockchain explorer". I suggest trying several to be more confident of the information returned.

If I add a 3 to the start of your second address 8uskrzBQKwbhWHL7LYFMAD5yCNH6vTLnj this makes a valid Bitcoin P2SH address which currently has been used in six transactions in recent days. None of those transactions involve the other addresses in your question.


Where are contracts used in the real world

Gregory Maxwell, Pieter Wuille, and theymos are using a 2-of-3 address to store a bounty for contributions to CoinJoin.

https://bitcointalk.org/index.php?topic=279249.msg2983911#msg2983911

Update: A 2-of-3 escrow and arbitration site recently launched: https://www.bitrated.com/


How do I mine with more GPU's than my motherboard has slots for?

They may have been using an adaptor cable which allows use of different slots, such as the one pictured here: https://bitcointalk.org/index.php?topic=66070.0

During mining the data going to and from the graphics card isn't nearly as much as when the card is used for gaming, so there's no substantial deterioration in mining output.

However, I do remember reading about at least one case where circuitry was overloaded doing this (ie it burnt out), possibly due to a faulty cable, but also possibly because graphics cards aren't designed to work that way.


Algorithm to go from seed to 20 (or more) addresses

Electrum uses BIP 32 to go from a seed value to private and public keys. Addresses are then derived from those keys. Public keys are also derived from the private keys, except in the case for watch-only wallets.

The full BIP 32 specification is available here.


Bitcoin explorers don't show my addresses transactions

Check that this is the actual address that you used to receive the Bitcoin in the past.

The default behavior for wallets is to generate a new address each time you want to receive funds. This means that if you simply opened your wallet, hit generate, and tried to scan that address, it will show 0 transactions. And, this is correct, because even though the wallet has received Bitcoin, that specific address hasn't.


When you pay from a P2SH address, does its change go into a P2SH address too?

No. Not necessarily. You can include p2pkh/p2sh/p2wpkh/p2wsh outputs.

  Because that means you must always keep the redeem script around to make the change addresses

If you consume P2(W?)SH UTXOs to produce new P2(W?)SH outputs, you generally keep the redeem script or communicate them well in advance with the recipient (if not yourself).
If you consume P2(W?)SH UTXOs to produce new P2(W?)PKH outputs, you do not need to communicate the redeem script as the recipient can work it out themselves.


How to determine the balance associated with a given BTC address based on input/output amounts

It looks like you are trying to calculate address balances by what I assume to be transactions. The way the data is presented in your table, I get the impression that you are assuming that there is only one input address and one output address in every transaction. That's not the case, though.
Each input in a transaction spends an Unspent Transaction Output (UTXO) created by a previous transaction. Transactions can have many inputs and there is no requirement for all the inputs to have been received to the same address. In fact, address reuse is not recommended, so most of the time every input is associated with a different address.
Let's look for example at this random transaction (via blockchair.com) with four inputs and two outputs:

It uses funds that were previously received to four different addresses and reassigns the amounts to two new addresses. So, you'll need to amend your approach slightly: instead of looking at transactions as atomic units to feed your script, parse each input and each output separately.


Here is an example of taking a 256-bit hex-encoded private key and creating an uncompressed Wallet Input Format (WIF) private key for testnet using the libbitcoin v3.0 bitcoin-explorer (bx) command line interface. bx sub-commands manual pages are located on the right column of its Wiki

% echo "0000111122223333444455556666777788889999aaaabbbbccccddddeeeeffff" | bx base58check-encode -v 239

91avAoeY5k21BDnfaHNLv63frRJhn5RmnEw4XgcsbfpWxPg1A9N

Similarly, here are the results for the associated  compressed public key.  (Note by convention that "01" is tucked on to the private key.)

echo "0000111122223333444455556666777788889999aaaabbbbccccddddeeeeffff01" | bx base58check-encode -v 239

cMahgGtgBvsRn7SZFuFCuKGnV8H8yxYLegVcaRsLL2LjD6WFLuAg

More details for using bx for altcoins can be found at Altcoin Version Mapping.  There is a table up top of the wiki that provides insight as to why 239 and 111 are used as versions in bx commands above and below.

Use what ever QR-encoding mechanism you like (e.g., QRencode and encode either 91avAoeY5k21BDnfaHNLv63frRJhn5RmnEw4XgcsbfpWxPg1A9N or cMahgGtgBvsRn7SZFuFCuKGnV8H8yxYLegVcaRsLL2LjD6WFLuAg, but remember the following 256-bit hex encoded private key

0000111122223333444455556666777788889999aaaabbbbccccddddeeeeffff

is one of the worst private keys ever... but makes the point real clear we have a 256-bit hex-encoded key.

Be aware if the funds are deposited to an uncompressed public address and you provide the private WIF key for a compressed address an import or sweep is not likely to work.

The uncompressed public address for the very simple private key can be found by:

% echo "0000111122223333444455556666777788889999aaaabbbbccccddddeeeeffff" | bx ec-to-public -u | bx ec-to-address -v 111

n2nkn4KFNtNbu6Q6GQPZwNZWDiiNsmm9d8

Similarly, the compressed public address can be found by:

% echo "0000111122223333444455556666777788889999aaaabbbbccccddddeeeeffff" | bx ec-to-public | bx ec-to-address -v 111

n47QBape2PcisN2mkHR2YnhqoBr56iPhJh


cgminer settings [ ati / amd radeon HD6870 GPU ] scrypt

Optimum hash rate depends not just on the parameters sent to cgminer but also on how was this program compiled, if it's 32bits/64bits, and the OS configuration.

The best results I've seen are with Gentoo Linux - as you may know, with this distro you first stablish your specific hardware configuration and then compile everything from code, thus optimizing all our software for the hardware you have to extract the most value off of it.

Something you do can do without going the esoteric route of OS tweaking, you could try modifying the GPU's mem clock as well as (slightly) overclocking. Usually, once you hit the point of diminishing returns with the intensity, thread-concurrency and work unit those are the next values to tweak.

If you haven't read the "README" file from Con Kolivas himself, when discussing Litecoin he delineates an optimizing algorithm in which you first find a sweat spot with intensity, then with another value, then another... finally going to mem clock and overclocking, he says you'll extract the best performance that way - such approach is valid for all scrypt-based coins.


Is there a similar server like Bitcoin core that truly supports accounts?

Bitcoin Core since 0.15 supports multiwallet.

That is probably much closer to what people expected the accounts feature to be (and confusion about it is one of the reasons for deprecating it).

Using multiwallet, one Bitcoin Core instance can maintain multiple entirely separated wallets simultaneously. They all have their own addresses, own keys, own transactions, own coins, own labels.

This is in contrast to the older accounts feature, where the keys, coins, and labels are shared across all accounts - only a balance was maintained per account.


What is "If ghash.io hits 51% people would just leave them?" referring to?

No, the network wouldn't disconnect them.  There's no way for that to happen.

Recall that a pool is an association of miners who agree to share the proceeds of their mining; whenever anyone mines a block, the other members of the pool get a share.  But miners are free to leave at any time, simply by stopping mining blocks for that pool and joining another one, or switching to solo mining.

There is a general belief that it is not good for the Bitcoin community for any one miner or pool to control more than 50% of all mining capacity.  The speaker in that video believes that if ghash.io miners were to eventually constitute 51% of all mining power, then some of those miners would choose to leave the pool.  It could be argued that it would be in their self-interest to do so; they'll make approximately the same mining profits no matter which pool they use, but since their profits are in Bitcoin, they have an incentive to ensure that the currency stays stable and usable.

The sentence you quote might sound like a statement of fact, but it's really just the speaker's prediction as to what he thinks would happen in that situation.  He might be wrong, but many other people have made the same prediction.


Wrong path.

Check the advanced passphrase options. Look for plausible deniability. Add a second wallet with a different PIN and SOME SMALL AMOUNTS. DO NOT rely on being able to refuse unlock unless you are willing to carry the consequences - which may mean spending hours arguing. Much easier to show them some small funds and be done.


Python - Querying bitcoin's block header using leveldb

The leveldb databases are serialized for optimization and do not work well with attempting to manually parse the data. You can more easily get details on a specific blockhash using the built-in JSON-RPC API and use the getblock call.


Are loans with enforced repayment possible on the blockchain?

What do you mean by "loans with interest"? If you mean guaranteeing being
payed back the principal plus some interest that is not possible since
that depends on the external world (i.e. it is offchain).

On the other hand, if you mean just creating repayment links for the agreed amounts it is just following the instructions of BIP21.


Do you have to pay taxes on Bitcoin revenues?

In Denmark (Europe) I have looked into this with a friend of mine, and we came to this conclusion.

Here, you will have to pay tax and do an invoice regardless of the currency. It is trade taking place within Danish borders, and therefor tax applies.

Although, these are rather old laws, and not very well updated. For example, a trade between two Danes going through a PayPal service, should technically be treated as a foreign trade, since the payment leaves Danish borders.

But modern day lawyers have no need to go after this, and as far as I can tell, no one have ever been "caught in trouble" with the legislation like this.

A interesting ruling was that the Danish tax authority once started creating accounts inside the game Second Life, and demanded tax cuts on the currency, even though it was "fictitious" and digital...

Although, they did not have much success with this.


Unable to broadcast multi-sig transaction that has been double signed

The first input of your transaction spends a P2SH 2-of-3 multisig output, but only contains 1 signature. It needs 2.


How to create both anonymity privacy and still achieve address reputation for merchants

Stealth Address is the answer.

Adapted from CryptoNote technology by Peter Todd (I think), Stealth Address basically is a form of Diffie-Hellman key exchange that allows sender to create a one-time key pair that only receiver can derive the private key. Thus Stealth Address allows merchant to public their well-known address while prevent any payments to be link to that address.


Geographical distribution of mining power/work

Not that I can find. You could work out the geographic distribution of mining pools based on information provided by blockchain.info, but they receive mining power from pool contributors from around the world, so that wouldn't really give you a complete picture. If a major pool went down (or was blocked off from the rest of the internet) most miners would just switch to another pool.


In principle the Mastercoin protocol should be exactly as safe as bitcoin (which it uses as a back end) against the powers of quantum computation.
However, there is one important difference.
bitcoin addresses that were used at least once are not safe against quantum computers (look for example in this article by Vitalik Buterin).
Since all Mastercoins were created by sending bitcoins to the exodus address it follows that any original bitcoin/mastercoin address (by that I mean, the original address from which bitcoins were sent to the exodus address) is not quantum safe.

Should we worry about it? probably not. Quantum computer attacks against bitcoins are not expected in the near future and even if they were here tomorrow it is more likely that attackers use them against bitcoin directly. Hopefully by the time this issue becomes relevant we all have nice mastercoin clients we can use to easily transfer out funds to a never-used-before address which is quantum safe.


When does a transaction end up in the transaction pool?

The transaction pool (or mempool, as it's usually called) is not a network-wide pool. Each node maintains its own mempool.

When a node receives your tx, it will validate and add it to its own mempool, and possibly broadcast it further on. In some cases, such as a lot of unconfirmed txs, a node's mempool may be full, in which case it will not be added.

There is no network-wide consensus required to add your transaction to the mempool, each node does so individually, regardless of how many other nodes have validated that transaction.


The complement of s (when s < curve order / 2)

In ECDSA s can be on either side of the curve and the signature will still be valid. The term "low s" is referring to the value literally being being below the curve order (0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0). The requirement of low-s is arbitrary (high s would have worked just fine as well), and is one of the new BIP62 validity rules that are intended to combat transaction malleability.

Absent this rule, any person is able to take a Bitcoin transaction, flip s in any of its signatures, and push the transaction out again with a different TXID. Being able to do this only changes the hash of the transaction, and does not alter its validity in any way. Being able to mutate transactions breaks a number of potentially interesting transaction types in Bitcoin like payment channels, where chains of transactions will suddenly be invalidated by a parent being mutated and an alternate form included in a block.

By forcing valid transactions to always have low s this ability is removed, though a person with the private key for a transaction is still able to mutate their own transactions by resigning them with a new nonce.


Is there any open source implementation of Bitcoin wallet encryption in Java?

BitcoinJ is the Java open source library used by many popular wallets, including Bitcoin Wallet for Android, MultiBit, GreenAddress GreenBits, and lots more.

It supports some sort of encryption of private keys, although it may not be AES-256-CBC (but it probably is).

HD Wallets

It's worth noting that BitcoinJ was recently upgraded to support creating and using BIP32 hierarchical deterministic (HD) wallets.  This is an option, and the old method of generating separate random keys is still available.

When used in HD mode, as the wallets listed above do[1], it won't store the private keys directly, but will simply generate them on demand from the HD root seed, so it's only the HD root seed that needs to kept encrypted.  Also users are strongly encouraged to keep a paper backup of the root seed, meaning that digital backups of the encrypted key are usually not needed.

[1] MultiBit currently doesn't do it, but the in-beta-test MultiBit HD does.

Bitcoin Core Wallet

In addition, Bitcoin Core developer Jonas Schnelli is working on splitting off and replacing Bitcoin Core's backend wallet code, so you may not want to start on any major projects without coordinating with him.

One of the proposed objectives for his project---although I haven't heard his take on this---is adding HD support to the wallet code.  (In any case, HD support will likely be added as an option; at least one core dev would like to keep random-derived private keys for some applications because they've been much better studied than HD derivation.)


Understanding GreenAddress nLocktime/recovery transactions

When using a multisig Green Address wallet your funds are locked in a 2-of-2 multisig account, i.e. if you want to spend money from that account you need both your signature and Green Address' signature. This is done so that Green Address can guarantee that you will not try to double spend money from that account. This allows Green Address to grant you instant confirmation transactions. However, this means that in case Green Address goes down, or stops functioning in any way, your funds are locked in the multisig account for good. To mitigate this problem, Green Address generates and signs a transaction that unlocks your funds after 90 days. This means that, in case Green Address disappears, after 90 days you can broadcast that transaction and get your funds back. The reason why nLocktime is used is that if Green Address gave you a transaction without nLocktime, you would be able to spend the money in the multisig account at any time. This would not allow Green Address to guarantee that you do not try to double spend your funds when performing a transaction from that account, hence making Green Address not able to allow you instant confirmation transactions. In this way, instead, Green Address can guarantee that you will not double spend from that account for the next 90 days, hence granting you instant confirmation transactions.


One could suggest that PPC is unattackable by currently known methods because of its hybrid PoW/PoS model.

NXT can be theoretically perpetually DoSed or at least hampered by DDoSing each successive forger since the network frequently knows with high certainty the IP of the next forger.

The most likely case is that no properly written cryptocurrency is generally attackable.  I have found no evidence of network attacks, but I'm not as deep into the communities as others.

From very far away, they are indistinguishable: both slower than Ripple and less prestigious than Bitcoin; they're market capitalizations are evidence of those facts.


Bitcoin core for Mac OS X stuck at the 95% mark for hours

As long as blocks continue to download, then all is well.

The Bitcoin client is doing a lot of disk i/o and CPU crunching when verifying each block, so hardware performance will matter.  If you have an encrypted filesystem performance issues are exacerbated.

A slight improvement will come when the Bitcoin.org v0.7 client is released.   And large improvements will come with the version after when the LevelDB database is used, improving access speed to reading and writing the data and "Ultraprune" is implmented which lessens the amount of storage.

Other solutions include using Simplified Payment Verification clients.  Electrum might be a choice for you to consider if your hardware is borderline for operating the full Bitcoin.org client node.


how to use bitcoind jsonrpc for regtest or testnet server in php?

Very likely you need to tell your PHP JSON RPC client to connect to the right port.

If you start bitcoind without -regtest (= main net), it opens up the RPC server on port 8332.
If you use -regtest, the port will be 18332.

I can't see what kind of PHP JSON RPC client you are using, but there must be a way to tell it should use port 18332.


GitHub won't let me fork Hivemind, maybe something about sidechain repos

You're trying to fork bitcoin-hivemind/hivemind, which is a fork of truthcoin/truthcoin-cpp, which is itself a fork of bitcoin/bitcoin. So, your hivemind repository would end up being a fork of Bitcoin too, which is not allowed due to a GitHub limitation.

The various workarounds suggested in the Stackoverflow page include:

Creating an organization to fork hivemind
Creating a second GitHub account
Deleting the bitcoin fork, forking hivemind, and creating a bitcoin branch that is even with bitcoin/bitcoin. That way you can still make pull requests to Bitcoin, as that repository is still in the fork graph of bitcoin/bitcoin.


Thin command line-capable client for Linux

Electrum has a thin client.  Does not need a full block chain.

It is available as an RPM for Fedora which will run on Centos 7 =>  See https://www.rpmfind.net/linux/rpm2html/search.php?query=electrum  and the Rawhide version is the latest which will run on Centos 7 - you will need to source out and install dependencies one at a time as it complains they are missing and retry until it intalls.

See also http://docs.electrum.org/en/latest/merchant.html  It will run command line as a daemon or you can set up Remote X access with Qt but as stated by ThomasV it can be used completely command line who would know best of all.

You will need to open the ports needed 7777 and 9999 in the firewall and once you launch it issue a =>  netstat -anp | grep 7777 to make sure it is listening

Then do => electrum daemon load_wallet

Do =>  electrum -h - to see all the commands available from the command line of via a curl call.  See the link at the bottom for more on curl calls with software like PHP or website webstores

However if you leave it running as launched from the shell it is likely to die so . . . then set it up to start on boot and respawn if it fails

And the service file, in /etc/systemd/system/electrum.service:

[Unit]

Description=Electrum Bitcoin thin client

After=network.target

[Service]

Type=forking

User={USER}

Restart=on-failure

ExecStart=/usr/bin/electrum daemon start

[Install]

WantedBy=multi-user.target

Assuming above you change the "User" to  <= whoever you will run it as and assuming you installed the rpm - the path to electrum is then correct as the path.  Enabling that with => systemctl enable electrum <= (on Centos 7) will make sure Electrum always starts on boot.  You will need to load the wallet manually if it fails and restarts or you reboot however.

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


What development stage do the version 0.13.99 nodes represent?

While releases are carefully tested, tagged and then made available as executables, it is also possible to compile Bitcoin directly from the source code.

Bitcoin Core nodes that were built directly from a commit on the master branch instead of one of the releases show up as 0.XX.99, where XX is the latest major release.


Profitable mining is done by fairly few individuals today (unfortunately), and so there is not really much demand for an easily installable mining client. Most professional mining operations likely compile their own mining clients from source, possibly with their own customizations.

The only demand I could see, which I suspect is your usecase, is to just try mining out for fun. That reason alone hasn't been sufficient enough for someone to spend the time to get a mining client on brew/macports/etc.


Why does Taproot require a new address format?

Background
P2TR addresses will be encoded using Bech32, although likely an amended version. In anticipation of Taproot getting merged, some proponents tested the behavior of various wallets and services regarding segwit v1 outputs. BIP173 prescribes that known restrictions should be enforced for Bech32 addresses, but that "implementations MUST allow the use of any version". The tests found that multiple wallets and services did not adhere to the spec, but rather either failed to create segwit-v1 outputs, or worse, silently downgraded them to segwit-v0 outputs, using the same output script but malleating the segwit version and thereby burning the funds.
Last year, it was also discovered that Bech32 is subject to a length extension mutability. Addresses with a specific ending can be extended by inserting specific characters (or removing them if they appear in specific positions). This is largely inconsequential for native segwit addresses due to their restriction to either 42 or 62 characters.
A recent proposal aims to fix both issues by amending the checksum calculation for Bech32. Using this amended format for upcoming segwit output verisons would protect funds from being burned as downgraded outputs would no longer comply with segwit-v0 checksum requirements, and at the same time remedy the length extension mutability for segwit-v1–v16.
Paying to segwit v1 addresses
The segwit spec explicitly permitted creation of all versions of segwit outputs. Therefore, it was expected that all segwit-enabled wallets would be able to create P2TR outputs out of the box.
According to the mentioned tests, many wallets and services did not comply with the spec, but would require updates to support sending to P2TR. Under the proposed change, wallets would have to additionally update the checksum constant for segwit-v1–v16 bech32 addresses.
Spending from P2TR outputs
The Taproot BIPs prescribe a new script version (Tapscript), Schnorr signatures, and the Taproot output format, so spending from P2TR outputs will require more implementation work in the first place, especially to make use of advanced features such as script path spends or using aggregated keys in the key path.


Bittrex API OpenBuyOrders OpenSellOrders - what do they actually show?

The Bittrex API documentation doesn't divulge many details but I expect those two values would be all outstanding (open) buy and sell offers, not just for that day.

You may need to contact Bittrex for further clarification.


Most wallets don't pay attention to which addresses you "send from", and for most purposes it doesn't matter.  When you try to send coins, they will select inputs from among all the transactions paid to all your addresses, hopefully in such a way as to minimize your transaction fees in the long run.

However, some wallets, such as Bitcoin Core, have a "coin control" feature that lets you manually select the inputs for a new outgoing transaction.  You could use this to choose only inputs that come from your desired address.  But in most cases there isn't any need to do this.


Does BFGminer halt processing if ASIC miners reach a high temperature?

Not all miners return temperature information, it's only shown when available.

For example with a Block Erupter, there's none to show.


Yes, you are correct. This is the way to follow. To easily follow you can use tools like blockseer


Order of Exchanging Revocation Keys during Lightning Transactions

Alice and Bob jointly create a public key R for each revocable output (RSMC output script).

They each privately generate r-1 and r-2, and derive public keys R-1 and R-2 from these. R is the sum of R-1 and R-2. No secrets have been exchanges, only public keys. So R is unspendable by either. However, it is spendable by r = r-1 + r-2

When a new commitment tx is created, this RSMC must be revoked. If the new tx commitment favors Bob, then Alice must share r-1 with Bob. Now bob knows that he can spend this revoked output if Alice broadcasts it. Bob doesnt need to share r-2 with Alice as he would rather broadcast the subsequent tx favoring him.

Pre-images are used for routing (htlc output scripts) See later slides in chapter: https://teachbitcoin.github.io/payment_channels.html#/


Can I double my money through the upcoming Segwit2x fork?

The "Segwit2x" fork is scheduled to activate at block height 494,784. After this block, there will possibly be 2 independent blockchains that grow independently of each other. If that happens, then any BTC you held before block 494,784, would also be available on the B2X fork.

This doesn't necessarily mean you would double your money. It's possible, but it depends on how the market prices both BTC and B2X. For example, if you held 10 BTC @ $5000 before the fork, and then the fork happens and exchanges come back online and the market prices BTC at $2000 and B2X at $2000, your 10 BTC + 10 B2X would be worth less than before the fork. It's impossible to know how the markets are going to react to the fork and how messy it's going to get.


The SHA256 hash tool you're using doesn't decode the hex into binary before hashing it. You can test that by passing in a string that isn't valid hex, like 'fhwdgads.' The wiki article assumes that you do that.

This one will do what you want if you select the "Binary hash" option.


update to 0.17.0 broke several rpc api calls that worked under 0.16.3, how to migrate correcty my code?

The first issue, with getbalance, is a known issue which will be fixed in the next release. You can see the pull request for it here: https://github.com/bitcoin/bitcoin/pull/14602

The latter, though, I cannot seem to replicate. To my knowledge, listunspent has not been modified in version 0.17, and it seems to work as expected when I test on the command line. Did it work before? Perhaps PHP is causing the issue, could you try enclosing the number as a string instead just to test it? "minimumAmount" => "0.00005"


bitcoin core wallet transactions syncing

Step 1. I backup the wallet and go offline.
Step 2. Someone send me a bitcoin to this wallet and i can see it(in balance).

When you're off the internet the wallet software will not know the transaction occurred until it is synced with other nodes on the network (P2P protocol). However, as long as the sender is online, the transaction will still be pushed into the mempool and eventually exist on the network (once included in a block) and you will be able to spend the output (so long that the transaction has been created properly).

Step 3 .Ill restore my bitcoin core wallet to the initial point..

If you've backed up your wallet file, you are essentially saving your private keys which is the only piece allowing you to spend TX outputs. If you reset your node or import your wallet into a computer that is not yet fully synced, the balance will remain 0 up until the block containing your transaction.

I assume that ill start over with the blockchain from scratch, And what will happen is that initially the balance will be 0 (since my node is not yet aware of the transaction). So ill need to synchronize up to the block where the transaction was included (this will take some time). At that time the balance will be updated. After that the synchronization will continue until it's up-to-date with the head.

Yep this is correct.


How to verify locking and unlocking scripts?

1) How can I decode the strings in the "scripts" fields of the transaction details dictionary to see the actual scripts. When I do, will they follow the format I outlined above?

Scripts are just raw bytes that follow a certain format that is somewhat explained here. In order to see it in the format you outlined (OP_DUP,...) you have to "decode" these bytes. Basically you start by reading the size of the entire script to know how many bytes should be read (when using an API that returns deserialized tx, you won't see this size). In this transaction the SignatureSCript size is 0x6b=107. Then start "interpreting" the script. To do that, you start by reading 1 byte, then based on that byte decide what to do next. For example in your SignatureScript the first byte is 0x48 (in the link above you see it in Constants table in the word column N/A), this value indicates size of a follow up data to be pushed onto the stack. So now you have a data push of size 0x48=72 bytes:

<3045022100e664861517c0ea91df7e4bde7001b7cda6b034a7f4c4c6e622b681a57bf72c4102207b02fa4046f6ca5c180aa60ee57e67fff4e82c09a7e60515b15a989cd4bd5d3a01>

In this particular transaction, this happens to be a signature. Then read the next 1 byte which is 0x21 and just like above you have another data to push with size =33 that happens to be a public key:

<03017e89c4294b1ca99533b424c367db4f18747c0cacad393e3fb103640bcdb2ce>

Do the same with other scripts. For instance for PubkeyScript the size of the script is 0x19=25 and the first byte in script is 0x76 (you'll find it under Stack) this value is OP_DUP (unlike previous two bytes, there is no follow up data to read, only an "action" to perform that is duplicating top stack item). Next byte is 0xa9=OP_HASH160 (find it under Crypto) and so on.

  2) How can I verify that the unlocking (input) script, indeed works on the locked (output) scripts? Is that possible using only the transaction details I have generated above?

You'll always need at least 2 transactions. 1 is the current one you have and want to verify, and the other is the transaction output it is spending. Here it is the transaction with txid 81b3bcc34490facea42a729ae166f599c7933501273010d0eb0c2a0efe190153and outIndex=0. Now you use the PubkeyScript of previous transaction from the corresponding index (locking script) with the SignatureScript of this transaction (unlocking script) together and perform each operation. See this example for each step.


After mining for a couple minutes, I stop getting shares.

I got an answer from reddit.

"Because you're mining on a variable difficulty pool... Which means you start out mining super low diff, and then it auto adjusts to a different difficulty level so that you get X amount of shares per X amount of time.

And now for the obligatory mention of NO, if you restart the miner a million times you aren't making $$$$$$$$$$$. Low diff shares worth less than high diff ones."   - CrateMayne


How to start programming using Ethereum?

Full Documentation of Ethereum "Frontier":

http://ethereum.gitbooks.io/frontier-guide/content/

Discussion Forum:

http://forum.ethereum.org


What are the drawbacks of using a web based wallet and how to overcome that?

The chance of a "known" website to have various attacks and compromising schemes done to it are attempted all the time.  So if you wallet on online and that site is compromised, your coins are gone... However if the wallet was on your computer, then the chance that some hacker is attempting to hack into your network is so small.  Using your own computer, you just want to regularly create backups or your wallet.dat file from your wallet and encrypt it with a strong password and put it somewhere like a thumb drive that you put in a fireproof safe, or maybe online in google drive, skydrive, dropbox.  The chance that an encrypted file is discovered by someone is so unlikely relative in comparison to the many hackers knowing about the mass storage of a given online wallet.

You could always diversify.... depending on your strategy for assets and asset management, you could always do like 10-25% of your coins in online wallet, I personally would not do any more value than that.


So Regtest as it says here on official bitcoin Developer notes. https://bitcoin.org/en/developer-examples#regtest-mode

  Bitcoin Core’s regression test mode (regtest mode) lets you instantly
  create a brand-new private block chain with the same basic rules as
  testnet—but one major difference: you choose when to create new
  blocks, so you have complete control over the environment.

Start bitcoind in regtest mode to create a private block chain.

## Bitcoin Core 0.10.1 and earlier
bitcoin-cli -regtest setgenerate true 101

## Bitcoin Core master (as of commit 48265f3)
bitcoin-cli -regtest generate 101

So on Regtest mode you do NOT need to mine with an ASIC.  It is like testnet but you decide when to and how many blocks to generate for your testing.

Hope this helps.

EDIT: Old Post below, as missed the regtest part of the config file

Yes u can solo mine, but you will need to run the bitcoin client so it knows what the latest work is.  I should mention that u should not be solo mining btc without at least 250TH or so hashing power from last calculation I saw with current difficulty, so u would need many ASICs for this.

Otherwise your conf file and connection string look ok.


Can I restore an additional address of Bitcoin Core

Try it Electrum. Do import extended private masterkey


I mined in early 2010 with a cpu miner and just found my keys after forgetting all thease years, no joke need info please

I think in late 2010 the first mining pools emerged. Could it be that you have been contributing your CPU Power to a mining pool and this was your credentials. If that was the case and you never cashed out your Bitcoin I guess you will not be able to access your coins unless you figure out which pool it was and see if the pool still exists


This is the proverbial veggie burger with bacon. There are plenty of people who like veggie burgers. And there are plenty of people who like bacon. But there are very few people who like both.

You have a cryptocurrency that's not run by a government. But it also has a central authority that can inflate it and regulate it at their whim. There are people who like these revolutionary cryptocurrency systems that are not run by governments. And there are people who fear deflation and like  currencies that can inflated as deemed suitable by a responsible steward. There are just very, very few people who like both of these things.

You will have to answer this very hard question -- "Why would I want to use a store of value that lets you tax my stored value as you wish?" And "Why should I use a currency that's not backed by a government and not subject to political controls when I can use currencies that are?"


UnhandledPromiseRejectionWarning: TypeError: Cannot read property 'fromSeedBuffer' of undefined

Try using the bip32 module. Also there are a few other things you'll need to fix as well. See Use BIP39 to generate BIP32 addresses. Note, this will generate a P2PKH address, see getAddress() function.

index.js:

'use strict'

var bip39 = require('bip39');
var bip32 = require('bip32');
var bitcoin = require('bitcoinjs-lib');

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

var mnemonic = bip39.generateMnemonic();
if (bip39.validateMnemonic(mnemonic)) {
    console.log('\nThe mnemonic is \n' + mnemonic);
    var seed = bip39.mnemonicToSeed(mnemonic);
    var root = bip32.fromSeed(seed);
    var dp = root.derivePath("m/140'/0'/0'/0/5");

    console.log('\nThe Address is \n' + getAddress(dp));
} else {

}

Output:

$ node index.js

The mnemonic is
assume victory kiwi swarm furnace firm thumb exact dizzy crucial neglect certain

The Address is
1FYtPnUZZ2ZJL2fZ6XehGtkHfujUHkqK3T


Is there a light (SPV) version of bitcoin core (bitcoind)?

Yes, bitcoind with pruning is similar to bitcoind, though some RPCs are disabled (naturally, because of pruning).

bitcoind in pruning mode does not store the whole blockchain, and can reduce your space usage to 2GB instead of 85GB.

See the release notes here and here.

Update: There is also a Full Block SPV wallet PR by Jonas Schnelli. Which is even lighter than pruning mode, since it only downloads blocks from the creation of the wallet.


How long will it take for OpenCoin to distribute the 50 billion XRPs?

The short answer is that nobody knows. In the short term, the rate of XRP release will be used to manage the network's growth. Once it transitions to a distributed network, that won't be an issue any more and it will likely then be limited just by how quickly we can give them away.


in the white paper you have 2 sides : attacker and honest node

This is open to interpretation, but this is how I see it.

Honest Nodes

Accept the blockchain history and do not try to retroactively modify it.

Attacker Nodes

Nodes that try to change data in past blocks and recalculate the proof of work. Note:

  To modify a past block, an attacker would have to redo the
  proof-of-work of the block and all blocks after it and then catch up
  with and surpass the work of the honest nodes. See Bitcoin Whitepaper pg. 3

51% Attack

The reason this is important is because, theoretically if more than half of the nodes on the network are trying to attack the blockchain, they might succeed and effectively gain control because collectively, they can compute the proof of work faster.

  Does it make sense or what is interpretation of neither attacker nor
  honest node succeed in finding a block ? What would that mean for the
  consensus rule that there is a third side ?

I'm not sure what exactly you would define as a "third side", but if, for example, there was a third group that was not "honest" it would be considered another attacker. Now, if the third group is not attacking the blockchain in the same way as the other attacker group, that could split the chain into 3 different forks: 1 "honest" chain, and 2 different "compromised" chains.


Electrum's "script hash" form with NBitcoin?

In F#:

let address = BitcoinAddress.Create("1HLoD9E4SDFFPDiYfNYnkBLQ85Y51J3Zb1",
                                    NBitcoin.Network.Main)
let sha = NBitcoin.Crypto.Hashes.SHA256(address.ScriptPubKey.ToBytes())
let reversedSha = sha.Reverse().ToArray() // add `open System.Linq` at the top
NBitcoin.DataEncoders.Encoders.Hex.EncodeData reversedSha


Calculate Miners Fee before Signing Raw Transaction?

Generally, you don't have to.

The normal workflow is:

Use listunspent to identify the outputs you want to use (if any).
Use createrawtransaction to construct a raw transaction with the outputs you want to create (excluding change) and inputs you want to use (if any).
Use fundrawtransaction to let bitcoind add a change output back to itself (and additional inputs, if needed), taking the expected total size of the transaction and current feerate on the network into account.
Use signrawtransaction(withwallet/withkey) to add signatures to the raw transactions if you're satisfied with the result.
Use sendrawtransaction to broadcast the transaction on the network.

Fundrawtransaction is the key here. It will do size estimation and fee estimation for the transaction, and construct change reflecting the difference between the inputs and outputs, minus fees.

Generally you don't care about which inputs to spend, and you can also just leave the inputs list to createrawtransaction empty. In that case fundrawtransaction will do the complete coin selection for you.

The same can be done with the more modern PSBT format. The relevant RPCs then are walletcreatefundedpsbt, walletprocesspsbt, finalizepsbt, sendrawtransaction.


Why is Bitcoin defined as having 8 decimal places?

When developing Bitcoin, Satoshi had already come with the idea that no more than 21 million of them will ever be made. However, there was an unsolved issue: how to accomodate all bitcoins in case it was actually used as a worldwide currency? Comparing to the current (2008?) world's M1 supply, it was determined that 8 decimal places was enough to cover the supply and still have the smallest division smaller than enough for daily usage.1

It's also worth noting that this decision means the total Bitcoin supply is approximately 250.89, which means it's smaller than the maximum value for a 64-bit integer (263-1), and smaller than the first integer that can't be exactly represented in a double-precision floating-point number (253 + 1), so that standard programming languages can deal with Bitcoin amounts without requiring custom implementations or dealing with overflowing.2

Ray Dillinger's response to: Why 1BTC should equal 10^8 satoshi ?
Satoshi’s Genius: Unexpected Ways in which Bitcoin Dodged Some Cryptographic Bullets


Why do Anchor Outputs need to enforce an nSequence of 1?

Because there must always be exactly one directly spendable output per party, in order to avoid one party to be able to "exhaust" the carve-out.
With two CPFP-ble outputs, one party could both create a chain of descendants transactions on the first outputs so that it meets the standard mempool limits and then trigger the carve-out mechanism using its own second output.
This way, the HTLC transactions are not included in the mempool and cannot be used to either create a long chain of descendants, or used as a carve-out transaction.
xref:

The carve-out proposal
The first mail (by Matt Corallo) expliciting the need of at most one directly spendable output for the carve-out to "work".


What is type 'pubkey' in a scriptpubkey output from getrawtransaction?

The script for an output describes the condition that must be satisfied for the money to move.

It means that the public key is contained in the scriptPubKey. Usually, the scriptPubKey only contains a hash of the public key, and relies on the scriptSig to supply the public key.

Explanation of the asm field in decodescript:

"asm": "03d81b3d2ac76e322dcb2e713cb8fdeaf68cb83406c0e4d28dcd10a880ef172a6a OP_CHECKSIG",

The first element is a compressed public key. The second element is OP_CHECKSIG. To spend this output, someone must put a signature in a scriptSig.

See also the P2PK bullet point here: https://bitcoin.stackexchange.com/a/35458/2306


What is a stale blockchain tip? Is it a blockchain tip missing the latest mined block?

(I don't think of this as a standard term, so the context was useful for me to figure out what this question was asking -- then I realized you're asking about a specific usage I have used regarding some p2p logic!)
I've used the term "stale tip" in the context of Bitcoin Core's p2p logic to specifically refer to the case of our tip not having advanced for a long time. This can arise benignly if the network is slow to find a block, of course; but it can also arise if our peers are not giving us blocks that are being found for some reason.
The "stale tip" detection logic in Bitcoin Core (see here, here, and here) is a simple check to see if our tip hasn't updated for a given amount of time (30 minutes), and if that condition triggers, our p2p logic will try to find new outbound peers to connect to with the goal of checking to see if any peer we can find has a more-work chain than the one we're on (and if we succeed, we will evict an existing peer).
A writeup of this behavior (and some other p2p design considerations) is available on the Bitcoin Core wiki.


Does adding more miners create more bitcoin?

I was on another forum and the claim was made that the miners using new technology GPUs

GPU mining has been obsolete for Bitcoin mining since around 2014. All mining these days is done using custom chips specifically designed for Bitcoin mining. It is orders of magnitude more power-efficient.

and because of this there will be more bitcoin produced.

Bitcoin has a fixed inflation schedule: 1 block every 10 minutes, and every block currently permits a subsidy 6.25 BTC (a number that halves every 4 years). The difficulty of producing a block goes up (or down) automatically as hashrate is added (or removed). This has a slight delay, so if the hashrate is continuously increasing, blocks will be produced slightly faster than 1 per 10 minutes, as the difficulty will always be slightly behind. This does increase the rate of inflation while it lasts, making the total supply be permanently ahead of schedule. However, due to exponentially decreasing subsidy, the limit is and remains approximately 21 million, regardless of block production speed.

My understanding of block rewards is it's like a horserace between miners (or group of miners) to solve the blocks and the 1st to solve gets all of the reward.
Who is correct?

Block mining is like a lottery, where every hash tried is one ticket. The lottery is always sold out, so there will be always one winner. There is a new lottery on average every 10 minutes.
It is not like a race; a race would imply that the fastest miner always wins. This is not true, everyone wins approximately proportional to what percentage of the network rate they have.


What happens if you copied private key and try to use it again?

Every private key owner can spend any amount of coins on appropriate address, but every coin on any address can be spent only once. After spending the coin it is suggested to go into another address which has another private key.

upd: Technically they are stored on the blockchain file (>200GB now), which of course is able to copy and wanted to be copied, but your private key is the only ability to let your coins be moved in the chain - if (and only if) you have the proper key. So, the proper key is hard to get and easy to lose and you might not like the idea to copy it except of backup operation.


I've downloaded Multibit Bitcoin Client, but I don't know how to view what my wallet address is?

Click 'Receiving', then look for an address.


Can I explicitly specify a path for Lightning payment?

In clightning there exist the sendpay command. From the manpage:

sendpay route payment_hash [label] [msatoshi] [bolt11]
  Send along {route} in return for preimage of {payment_hash}

If you look at my (work in progress) code for JIT routing you can see how I create paths and onions myself just with standard api calls to rebalance my channels :

https://github.com/renepickhardt/c-lightning-plugin-collection/blob/master/rebalance-jit-routing/rebalance.py


You need to grab some testnet coins in your new wallet. You can get them from any number of testnet faucets.


According to https://github.com/romanz/electrs

The server indexes the entire Bitcoin blockchain, and the resulting index enables fast queries for any given user wallet, allowing the user to keep real-time track of his balances and his transaction history using the Electrum wallet.
Supports Electrum protocol v1.4

It seems to me there are at least three ways forward:

Study the examples in the examples folder and add to electrs the facility you need using the interface of your choice.

Implement the Electrum protocol v1.4 in a custom client that you write. I would start by looking at the source code for Electrum.

use Electrum and import into it any address whose balance you are interested in.

The last seems like it might be the least work.


Will merged mining mine each chain as efficiently as non-merged mining?

Every hash you do will contribute fully to the hashing power of both block chains. You will have to do a tiny bit of extra work when you generate a work unit, but that's almost insignificant, and you only need to generate a work unit once for every few billion hashes you do.

You will generate just as many Bitcoins as if you only mined Bitcoins and just as many Namecoins as if you only mined Namecoins. There are only two downsides of any significance. First, your Namecoin blocks will be a bit larger than they would otherwise be, since they include Bitcoin headers. Second, you will have to generate new work units every time a new block is discovered on either hash chain, so about twice as often. (This can be a big deal for a large mining pool.)

See my answer to this question for details on merged mining.


What is the relation between a Hash Time Lock Contract(HTLC) and a Commitment transaction?

When a HTLC is created, a new commitment transaction is created. The HTLC is an additional output (script) in this new commitment transaction, in addition to the RSMC and “regular” outputs, and represents the amount that is pending “routing confirmation”.

When the HTLC is cleared, another commitment transaction is created, absorbing the HTLC output amount into the RSMC/“regular” outputs.


Armory cannot find bitcoin installation in Ubuntu 14.04

you need to copy both "bitcoin-qt" and "bitcoind" files into the installation directory and make them executable (chmod 755 bitcoin*) then try installing in armory.
check this link:
armory FAQ


Can a Non-Segwit Miner mine segwit transactions?

An old style miner would only receive a stripped transaction, i.e. a transaction from which the witness has been removed. They will consider a segwit transaction to be valid but non-standard because one element remains on the stack when resolving the redeem script.

If a miner included this transaction in their block, the block would appear valid to segwit-incapable nodes, but invalid to any segwit-capable nodes as any segwit input would be missing the required witness and thus would not be properly signed. This would lead to the block being rejected by 98% of the nodes on the network, and thus the segwit-incapable miner to lose their block reward as it would not become part of the heaviest blockchain. Segwit-incapable miners can however contribute blocks that only include non-segwit transactions that build on top of the chain that includes segwit-blocks.

This means that only a miner collecting transactions with a segwit-capable node is able to create a valid block that includes segwit transactions.


The fee goes to the miner who mines the block that includes your transaction. The fee is based on the size (in bytes) of the transaction and the age of its inputs (how long ago the coins spent were received).

Transactions get big if they have to "pull in" a lot of outputs from previous transactions and that raises the fee. So if you got a lot of small payments and then try to make a large payment, the transaction will be expensive because it needs to gather all those small payments.


Understanding Blockchain client implementation details

The source code of Bitcoin's reference client, Bitcoin Core, is a good place to learn how the Bitcoin developers solved these problems. You can find Doxygen documentation for the source code here.


How does IPFS use Blockchain
https://ipfs.io/#how says

Blockchains
IPFS and the Blockchain are a perfect match! You can address large amounts of data with IPFS, and place the immutable, permanent IPFS links into a blockchain transaction. This timestamps and secures your content, without having to put the data on the chain itself.

So yes, IPFS is separate from the Bitcoin blockchain but it seems you have the option of embedding a hash in a Bitcoin transaction (for which the usual fees are needed) as proof that the hashed data existed at a point in time.
The Bitcoin blockchain is a journal of Bitcoin currency transactions. Small items like hashes can be included in the transaction details that are recorded but you pay a fee per byte and you need to have a funded wallet.

Related Questions

What methods are currently used to embed additional data into the Bitcoin blockchain?


Help with Coinbase? Confused BCC address with BTC one

Did he actually send you the bitcoins to the BCC address? If yes, and the transaction has been sent to the blockchain, then you are indeed out of luck and can't recover that.
Sorry!


Is there a way of rewarding users who confirm others' transactions?

This is the purpose of transaction fees. By mining a block, all transactions hashed in the block are confirmed, and the corresponding transaction fees go to the block discoverer (along with the block reward).
Right now the block reward dwarfs the transaction fee reward... but there is no downside to including other transactions while mining, so all of the nodes will do it.


You don't say what country, but I assume you are in the United States.

First things first: make sure you have the technical capability to handle the coins and understand how Bitcoin works. You don't want to buy those coins and then lose them due to a technical screwup. Practice first with a smaller amount of money until you are confident you securely handle and store coins.

The better known dealers will require identification. Genesis Trading in NY is one of the larger US brokers.

You can also use an exchange directly such as Bitstamp (in Luxembourg/London) or Bitfinex (Hong Kong) or Coinbase (San Francisco) or Kraken (San Francisco). All will require a lot of identification and verification information. There is an exchange in Bulgaria (?) called BTC-e that has a reputation for not requiring very much information, but they probably require at least a passport scan.

For anonymous trading you will have to use Local Bitcoins, ie individual small time dealers. Each dealer has their own policies.

Your question is kind of a basic question. That you would even ask a question like this suggests that either (1) you need to learn more before trading Bitcoins, or (2) you are some kind of Fed or narc who is looking for information about something they want to attack without really understanding it.


Transfert d'adresse BTC Segwit vers adresse BTC non segwit

Non, tout va bien ! C'est le même réseau « Bitcoin ».

Nope, all is fine ! They're both part of the same network.


Miners have about 26% profit at the moment, that's includes only cost of electricity vs bitcoins sell price.


Will transaction confirmation time be reduced as the network size increases?

No. The average time per confirmation will always be about 10 minutes (but it's possible that the variance will be lower in the future). And the number of confirmations required to prevent double-spending by an agent with a given hashrate will also not change (6 is an arbitrary number reflecting a "low enough" probability for someone with a "high enough" hashrate).

What will change is services to bridge the gap. There will be split-key eWallets which cannot steal your money on one hand, and can have trusted green addresses on the other; and there will be insurance agents such as https://zipconf.com/ that absorb confirmation risk based on their model of the probabilities of double-spending.


How to get bitcoin address of any private key?

the private key is a Private Key WIF Compressed, 52 characters base58, and can be used to convert into (compressed or uncompressed) public keys. These pub keys are usually hex codes, and can be converted into bitcoin addresses: 1D2mnuj9qeRAzmw8mjLDciyvqzQiiYZCfE and 1KWvNZB4Gf2Kars88aGR2cedUb81Q6gZKC. There is no easy way I am aware of to do this in bitcoin client.

Looking at the line you provided, the bitcoin address is behind the comment sign (#), and is part of a HD key, which complicates things even more, if I had to explain it. To understand the whole idea behind keys, you may want to read bitcoin.org or the book af Andreas "Mastering Bitcoin" (online available).

Looking then at e.g. blockchain.info, you can provide the addresses or the keys, and see that there is no value.

Hint: never ever (!) use this key again to transfer values. It has been disclosed, and people are only waiting to snipe the values from this address! - me too :-)


Access Bitcoin Blockchain to analyze transfer patterns

Is it possible to extract the following data from the bitcoin ledger: (time, sender, amount, receiver)?

Something like that would be possible, you could run your own bitcoin node and query the data from that, or use an API from a site like blockchain.info, which provides transaction data. Here's an example of a transaction from blockchain.info:
https://blockchain.info/rawtx/a196032e52c0a9d7a9737ffa212f029bceb9618d0bff5c6dde99ecac4e28bf06

Note that transactions do not have times encoded into them, the time such a site gives would just be the time that site received the transaction first.

  the address can be used to approximate unique users? Is this correct?

This is not correct in general, while some users may reuse the same address for every transaction (one-to-one), other users generate new addresses for every transaction they receive, so there is a many-to-one relationship between addresses and users. In the more uncommon case, there are also multisignature addresses, which often involve more than one person approving any spends from that address, so that you sometimes have a one-to-many relationship between the address and the users. All addresses of that type start with a '3' or 'bc1' though. So its a lot more complicated to make assumptions about users than it is to just look at addresses.


(Why) is it difficult to merge and split wallet.dat?

The ability to import and export keys is in the works, with several forks in the Github project trying out various methods. One of them will eventually be selected and make its way into the official client. Until then we're reliant on tools like pywallet to import and export keys.

As for the directory concept, the wallet.dat file stores this information in a BerkeleyDB format, as well as a transactions list. I can see the potential benefits, though there are likely downsides that I've not considered and I'm certainly not qualified to speak to the mindset of the developers. Perhaps you'll get lucky though, at least one big name from the Bitcoin devs has been known to frequent these parts.


Bitcoint Core Gui will not display once index is loaded

If you go into the task manager (ctrl + shift + esc),  expand Bitcoin Core and left click and click maximize it will show up.


Delay of shipping mining equipment on purpose?

There are reports online that Butterfly Labs and Avalon were both doing this as some customers have received dusty equipment with mining pool information set, however it is just as likely that the equipment was shipped out with preset pools and customers plugged them in and didn't reconfigure settings.

https://bitcointalk.org/index.php?topic=236348.0 is an interesting read, however it all appears to be circumstantial evidence at best.


what are the chances of vanitygen address - private key pair collision?

Samr's vanitygen gets its initial private key from OpenSSL's random functions, which have been well vetted. Even if you specify a random seed (which is a good idea to add even more randomness) the entropy generation random libraries from the crypto is still used. It has equal randomness and strength as Bitcoin's address/key generator, with the exception that you are discarding millions of addresses that don't start with your vanity phrase.


It sounds like the problem may be that the new wallet derived a different type of  address from your private key.

Normal wallet function will present you with a new address each time you receive coins. Each of those addresses will have an associated private key, that needs to be used to spend the funds. Note that the same private key is not used to derive multiple addresses in a wallet, there is a 1:1 relationship for private keys and addresses.

So when you want to import that private key to a new wallet, you need to make sure the new wallet derives the correct address from it (ie, the same one your original wallet did, when you originally received the payment), otherwise the new wallet is showing a different address then it will not show your funds, since it is looking in the wrong place.

This question has a bit of info about different address types.

As a first step, compare the first characters of the address that holds the funds, and the address that the new wallet generated. If they are not the same (eg the original is 3... and the new wallet is bc1...), then you will need to either instruct the new wallet to generate the correct type of address, or if this is not possible, you will need to find a different wallet that is capable of doing so.

Note: if your bitcoin-core wallet is fully synced, you can run the command bitcoin-cli listunspent, to get a list of UTXOs that the wallet is keeping track of. You can look through the list to confirm the balance of specific addresses using this command, to ensure you are attempting to export the correct private key.


What are "discouraged blocks" in the blockchain? (examples and explanation please)

The wiki article you describe has been updated since by a skilled developer who is part of the Bitcoin team and the key change now reads:

  Bitcoin does not currently implement block discouraging in any form.

So this appears to be a concept that has not been implemented by any clients.


Why doesn't getblockchaininfo reveal BIP9 signaling statistics?

The answer is pretty boring. Nobody did the work to implement it (yet).


Bitcoin transaction priority calculation

input_value_in_base_units is the number of satoshis that the input is worth. One Bitcoin is worth 100,000,000 satoshis.

input_age is how many blocks the input has been present for. An unconfirmed transaction has an age of 0, and one that has 100 confirmations has an age of 100.


What are good ideas to help promote Bitcoin?

I carry around with me a Casascius physical bitcoin (and another one that has been peeled).  This gives a great visual aid in explaining it in terms another person is already familiar with.

You can encourage people to visit the faucet, and then do a trial run spending it, as described here:

http://www.bitcoinmoney.com/post/25967017874

You could print up some Bitcoin notes with a trivial amount of bitcoins (e.g., twenty cents worth) and hand them out to people.  Put an expiration on it and if the funds aren't redeemed within that time (e.g. a month) then you reclaim the funds and give them out again.  But at least every one that does get redeemed, you know that person (or whomever they gave the note to) now knows what a bitcoin is and how it can be transferred.

But the point to get across is that this is not just neat technology or some type of marketing of a new product.  This is how we defang the financial system that repeatedly harms us (or at least lessens our reliance on it).

Every time a bitcoin transaction replaces a PayPal transaction it is like placing a pea on "our" side of scale versus the bricks holding their side down.  The scale has a big plate though, and eventually all of our peas together will cause it to tip.

But that's how decentralizioin works -- one pea at a time.


Can one spend part of multisig address balance leaving the rest intact?

Yes.
Funds can be spent from a multisig address in the same way as from other addresses, except that you need to have the required number of valid signatures. Each UTXO must be spent in its entirety, but you can
create a "change" output which is sent back to the same multisig address. So it effectively works like partial spending from a user's perspective.

  1 BTC from the address and later create another one to spend 0.3 BTC?

Note: You would have to account for tx fees, so slightly less than that.


Difficulty for hash (reversed function of "does hash met difficulty/target")


I have a bitcoin address , how do I check how much bit coin I have

Blockchain.info and enter the address into the search field. Your wallet controls the private key associated with the public address used to receive funds.  Control of private keys enable funds to be spent by your wallet.


OP_ADD operation in bitcoin script for integers greater than 128 in java

you should use Litte-endian encoding. if the highest bit is set (range 128-255, 32768-65535 and so on) you should append the zero byte to mark these bytes as positive number.

So, 150(dec) will be encoded as 9600

270(dec) will be encoded as 0e01


No, a bitcoin transaction which has already been included in a block on the longest chain cannot be reversed.  This is by design as Bitcoin is intended to behave much like cash, with recipients being assured that the money is now permanently in their possession after a transaction has been included in a block.


You can either install a client, or use some Namecoin-Bitcoin exchange (like BTC-E) to obtain an address. It`s generally the same as getting a Bitcoin address really, only a bit less popular.


Will forks and alternative block chains cause hyper-inflation of decentralized digital money?

It depends entirely how much those alternate block-chains get utilized. In the recent examples of ixcoin and i0coin, a small portion of btc miners and users switched over, sold their stash and went right back to bitcoin. It's essentially a case of network effect - whichever block-chain has the most users will be the most attractive to new users, and those new users themselves contribute to that effect. Bitcoin is by no means beyond the "tipping point" where forks can no longer threaten it, but short of a fork with some superior feature or another it remains the preferred fork and probably will for some time. Even namecoin hasn't touched bitcoin's user-base much despite having a definitive use built into the protocol.


How do you mathematically add and subtract hash power?

You sum (add) their individual ratings. For example, if I had two miners, one rated at 20MH/s and another rated at 15MH/s, my total rate would be 20MH/s + 15MH/s = 35MH/s.


What is the motivation behind Russell Yanofsky's work to separate Bitcoin Core into independent node, wallet and GUI processes?

There are benefits to both users and developers to having Bitcoin Core split into separate node, wallet and GUI processes.
As Alyssa Hertig outlines here the benefit to users will be being able to run the Bitcoin Core node on a different machine to the Bitcoin Core wallet rather than being forced to run them on the same machine. A user could leave a node running continuously in the background but start and stop the wallet and the GUI as needed. It also opens up the prospect of using a different (i.e. not the Bitcoin Core) GUI or wallet with the Bitcoin Core node.
For Bitcoin Core developers, Yanofsky highlights maintainability and security as the key advantages.
Process separation will make Bitcoin Core more easily maintainable as it defines interfaces at process boundaries. Different parts of the code can interact by calling each other instead of sharing state. This helps code review by making it easier to identify dependencies between parts of the code. Defining boundaries in the codebase will also make code review more scalable as reviewers will just need to understand part of the codebase well rather than needing to understand interdependencies across the whole codebase.
From a security perspective, the wallet and node code could run with different privileges and vulnerabilities should be harder to exploit given they will be limited to a single process. Inter-process communication (IPC) makes new debugging tools available such as the IPC_DEBUG environment variable to log all IPC calls.
There are some potential disadvantages that Yanofsky highlights. Inter-process communication is generally slower. IPC code can be tricky to write and may have bugs. Bad interfaces and unnecessary layers of abstraction can make it harder to implement new features. Features such as SPV (Simplified Payment Verification) that cross process boundaries will likely be more difficult to build.
[edit: ariard contends that the ZeroMQ library makes it relatively easy to write IPC code. He also argues that clean interfaces don't make it harder to implement new features (e.g. SPV) compared to bloated code as a single process.]
Overall it seems clear the advantages outweigh the disadvantages. At the time of writing (August 2020) there are four remaining PRs to be reviewed and merged into Bitcoin Core and then Bitcoin Core should be multiprocess!
For more details on the process separation project see here.
You can install multiprocess Bitcoin Core using these instructions with debugging guidance here.


How can someone mine bitcoins at billions or trillions of hashes per second when the nonce is only 2^32 in size?

The timestamp in blocks does not need to be set to the actual time of the current hash. So during mining, the timestamp can be moved when the nonce is exhausted even if the actual time is not that timestamp.

There are also other ways to change block headers that do not require changing the timestamp. Miners frequently add a value to the coinbase part of their coinbase transaction which is referred to as an extranonce. Miners will increment that in order to change the merkle root every time they exhaust one set of nonces so as to allow for even more nonce possibilities. Furthermore, other things can be done such as permuting transaction order, selecting new transactions, changing coinbase output scripts, etc. All of these ways of changing the block hash allows for miners to do trillions of hashes per second.


How to check if a bitcoin address received a new transaction programmatically?

You can set up a bitcoin-core node to watch for new transactions, and notify you of them.

This is a preferable solution, since you won't have to trust anyone to supply you with the correct info (what if they lie, or are incorrect?), and you will retain your privacy (why dox yourself with respect to which addresses you are interested in, to the API provider and anyone else listening in on your connection?).

You can set the command -walletnotify=<cmd> in your bitcoin.conf file, and write a bash script to alert you of the transaction in question, in your preferred manner (write to a log file, send an alert email, blink a light, etc).

For a slightly more in-depth walkthrough of setting this up, see this question: How do I use walletnotify?


The correct configuration parameter is: paytxfee=<amount>, where <amount>is the amount (fee) per kB to add to your outgoing txs


Hypothetical, is it possible to retrieve stolen blockchain currency?

Proof-of-work blockchains offer transaction immutability, meaning transactions can't be undone or modified after the fact without having to redo all the work that was done since the time of the transaction.

In the case of a fraudulent transaction, several problems arise:

How can it be proven the transaction was indeed fraudulent? How can validators and miners determine which of the parties involved is the "rightful" owner? As far as the system is concerned, providing a valid signature is proof of rightful ownership.
If the transaction in question was confirmed, you'd need 50+% of miners to agree to redo all the work they already did in order to create an alternate history where the fraudulent transaction didn't occur. This rewriting has a huge cost on the network (while miners redo the work, they can't build on top of the latest block, grinding the chain to a halt). Getting people to agree to this would be nearly impossible.

Some blockchains (in particular Ethereum) had to deal with this issue (DAO problem) and opted for a custom change to the consensus code, which made that change opt-in and eventually resulted in a chain split between the people that wanted to remove the "fraudulent" transactions and those that didn't. Others (OMNI in the case of a Tether heist) decided to blacklist the addresses containing the stolen funds, requiring yet another custom, opt-in change to the consensus code.

Both cases involved humans making hard decisions and leaving some people unhappy about it, there isn't so far a generalized, on-chain, way to deal with this issue.