Segwit2x/btc1 block header changes: wipeout protection for SPV nodes?

From following most of what has been going on in the btc1 repository, it is S2x's express plan to take along SPV wallets with their hard fork. Therefore, they are limiting wipeout protection to anything that doesn't break SPV wallet compatibility. Most notably they don't plan on using the proposed hardfork bit. I believe they are going to require a block with a base size greater than one megabyte (srsly!) for the block at fork height: ISSUE/PR


0/confirmation race attack double spend transactions

The bottom line is that there is no way for you to safely accept zero confirmation transactions.

  What happens if a miner (which has transaction A in his main memory) gets the conflicting transaction B?

Depends on what software the miner is running and how they have configured it.

Some nodes will reject it.
Some nodes will accept it.
Some nodes will accept it conditionally.

There's no knowing what people are running on mining nodes or what rules they have.

  Would a miner throw away transaction A and include B, if B has higher transaction fees, a smaller size in bytes, or of other attribute?

Ditto.

  Can a merchant be sure, that transaction A will be confirmed, if it is propagated successfully to let's say all or most miners?

Absolutely not.

An alternative can be mined at any time, invalidating the original. This attack has been used in the real world to defraud websites of their Bitcoin payments to the tune of millions of dollars. Successful double spends can even happen once the transaction has been included in a block, which is why a large number of confirmations is suggested for people accepting Bitcoin as payment for services.


How do you exchange bitcoin for real money?

To exchange Bitcoin with another currency, you are really selling your bitcoin to someone else in return for "real" money. One popular exchange site is LocalBitcoins. This site offers many different methods of exchange.

To the best of my knowledge, selling bitcoin using PayPal violates their terms of service, although some sites do offer this.


Bitcoin core full node won't start on mac reboot!

1) Place bitcoin core in the application folder
2) Start terminal
3) Paste

/Applications/Bitcoin-Qt.app/Contents/MacOS/Bitcoin-Qt --resetguisettings

4) Hit enter


What do you mean by username and password? Was it the Silk Road username and password? Wallets that are stored locally on your computer are stored with a public key and a private key.

If the username and password that you have is for Silk Road, then your money is not recoverable. This is because they own your private keys on their site and now that they have been shutdown, you won't be able to interact with your wallet.

If you have a username and password not from Silk Road, it is more likely that you had an online wallet which means that it might still be recoverable.

Best of luck!


Miners also get a 12.5 BTC reward per block, which is roughly $7,500 at current prices. This is the main reason miners are willing to spend so much to mine a block. The transaction fees themselves don't add up to very much when compared to the actual block reward, usually.

The mining subsidy slowly fades away, however. Every 4 years, the amount of new bitcoins created in a block gets cut in half. At a certain point, either there will be more transactions paying fees, more fees in the same amount of transactions, or mining will become less expensive (or some combination of the three).

I should note that the cost of a transaction is not really $14. The actual cost to send the transaction bytes to peers and save the data on disk is fairly minimal for any individual miner.


Risk to Bitcoin balance when making Bitcoin Gold transactions

Here is an article answering this very question https://bitcointechtalk.com/how-to-protect-against-replay-attacks-7a00bd2fe52f.

Through either careful transaction construction, using timelock supporting wallets, or simply waiting some time for things to be settled, you'll be safe.


I have lost my blockchain.info wallet identifier and used a fake email, does anybody know if its recoverable still?

Yes you can as long as you have the mnemonic phrase.

Enter it here for recovery:  https://blockchain.info/wallet/forgot-password

If you don't have the access to the email address then you will need to contact support at: https://blockchain.info/support-desk

Here's the info straight from Blockchain.info

A mnemonic is the passphrase seed of your Blockchain Wallet provided to you when you sign up for a new wallet. The purpose of this is in case you need to recover your wallet at a later date, if you lose your login information. When you recover your wallet with your mnemonic, your password and identifier will be displayed to you. Your main password can not be changed once it is set, therefore your mnemonic will always remain the same for each wallet. - See more at: http://blog.blockchain.com/2015/03/17/whats-the-difference-a-comparison-between-key-blockchain-wallet-terms-and-features/#sthash.kRhvW9CM.dpuf


How big is the bitcoin community 1st of Feb. 2012?

Have a look at:
http://bitcoinstatus.rowit.co.uk/

Nibor on the bitcoinj mailing list has created a whole series of charts about the bitcoin p2p network.


Why don't the miners just take profit from our coins and make the coin worthless?

Because miners do not actually own/ or have access to the bitcoins which are being spent in a transaction.

They simply choose a number of transactions which have valid signatures, and put them together with the hash they created/solved, thus creating a valid block.
See https://en.bitcoin.it/wiki/Block_hashing_algorithm for more information.

The person that owns the private key owns the bitcoin, which (unless you share it ofcourse) would be something miners, or anyone in general, won't have access to.

EDIT:

There's currently ~12.000.000 TH/S, In order to gain 51% of the hashpower, ( which is needed to always be faster, thus control the bitcoin chain), you would atleast need 12.000.001++ TH/S, lets say we would generate this power with an Antminer S9+, currently the fastest, (i believe?) which has an average speed of 11.5TH/S

12.000.001TH/s / 11.5 = 1043479 Antminers, which would cost a total of
1043479*2000= 2.1 billion$

If you're willing to spend that much money just to short bitcoin, you have to ask yourself if it's going to viable, and profitable.

Even if there's a majority attack, miners still can't decide the protocol rules. See What can an attacker with 51% of hash power do?

as to what is actually possible with a 51% majority of the hashpower.

You could then speculate on the price going down, but then again, it might not, leaving you with extreme losses.

Also, you would probably be able to earn way more by simply mining the majority of the blocks and its fees.. 25 Bitcoin every 10 minutes ( since you have the majority) = 250k$ every 10 minutes. ( At the current exchange rate. )

250.000*6*24=36.000.000$ in blockrewards each day alone.

So, i'm not saying that you can't theorethically making profit shorting it while trying to destroy it with a majority hashpower, but that there are probably better options.


I was working with a broker

There's no need to work with a broker to buy or use Bitcoin.

That's a bit of a red-flag. Often criminals call themselves brokers to trick people out of money.

  now my "bitcoins" are in "blockchain"

There are many businesses based on or around Bitcoin. I believe several of them use the word "Blockchain" as part of their name. One of them is Blockchain Access UK Ltd which is registered in London England. They were only registered 2 years ago. Their accounts are overdue which is not a good sign. They were nearly struck off last year which is also a bad sign. They are trading as Blockchain.com. Perhaps you refer to an account with them? Their website says their wallet service is provided by Blockchain Luxembourg S.A

There is no need to have an account with Blockchain.com, you can buy and use Bitcoin without having anything to do with Blockchain.com.

Blockchain is also the name used for the data-file that keeps track of Bitcoin movements. Every Bitcoin user has access to a local copy of the blockchain data file. Most wallets keep a copy or have access to a copy. But having this blockchain data file doesn't give you access to, or control over, any money. Generally you need a functioning wallet, a backup you can recover or something called a seed-phrase or a private-key. If you don't have any of these, you probably don't have any Bitcoin money.

  and I have no trace.

If you don't have account ID and password for Blockchain.com you almost certainly don't own any money at Blockchain.com.

If you don't have some sort of Bitcoin wallet program or app (there are many different Bitcoin wallets), you probably don't have any Bitcoin.

  How do I find them?

You find Bitcoins in a Bitcoin wallet. If you don't have a wallet on your computer or phone but have an account with some online business such as Blockchain.com, get in contact with them through their website.

You can find the company behind Blockchain.com at it's registered address (see above).


I withdrew my BTC coins to a NEO wallet Did i lose my coins? How can i recover them?

The response it pretty clear , you need to find a way to extract the private key of the neo wallet and import it into some other BTC wallet which allows you to do that.

What wallet are you using for NEO?

I cannot comment if this will work though as i have no idea how the Private,Public keys are generated for NEO.


No way to know.  Bitcoin addresses are created by a random generation process, and the address itself shouldn't contain any information associating it with the site where it was created.  If it did, that would weaken your privacy.

The wallet site should have offered you the option to back up your private key, so you might look for those keys somewhere on your computer.  Otherwise, if you don't know the site and have the required password / passphrase / whatever, you cannot get those coins.

Fortunately, faucets provide such a minuscule amount of bitcoin that you surely haven't lost much (see Do faucets actually work?).  So it's probably not worth your time to do anything other than just start again.  This time, make a backup of your private keys.


I do not see a worker role as a possible candidate primarily because of the complexity involved. Other than storage and unless I am missing something (just used worker roles once in the past) you will also have deployment difficulties, which will have to be repeated with every bitcoin upgrade. I do not see what you will gain using a worker role anyway (in the context of bitcoind). (?)

So, if the choice is between the two I would say stick with the VM.

Note that Azure also provides an option to easily install a full bitcoin core node using bitcore in a CentOS VM. See here for details; it offers some extras that might interest you.


Where can I find documentation about interacting with bitcoind's json-rpc?

Visit API reference (JSON-RPC)

There are several solutions:

You can build bitcoin-cli (which provides json-rpc communication with deamon through command line), and call bash commands on the server. For example, if You run PHP server, You can asynchronously run bash commands.
Also You can use json-rpc libraries on your server - feel free to google for them. For example, if You run PHP server, You can use a library like php-bitcoin-api.
Also, I recommend You to run own blockchain explorer which will help You to communicate with a blockchain of Your coin. For example, try to run bitcoin-abe explorer or any other.

Hope it will be helpful!


Transaction Malleability in the blockchain

Here is example: https://blockchain.info/tx/683f45578328242a06bc5c54acbcbe6e70a5435b4561fc8b0570a59ab09f8bfa?show_adv=true

Look at first input script in raw:

4d49003046022100847361c694421bf63ea1b51d8e2189805b161ab3d4cb96ab745a20468dd6c2ea0221009160897652bedfd7c837855d793c32509063338ac7524b8f09abfed761cf16fc014d410004c8dde23708932059bf4491c96794c5412b1182d62d2741e0986cb87276d3053f0b7326155114ad67c04adc60b5a47718fa8744ecb86a001f99da8761113edb24

Look at first byte: 4d (OP_PUSHDATA2). It means, that next 2 bytes contains length of data, that will be pushed to stack. This length = 0x49. But typical transaction does not use OP_PUSHDATA2 command. If transaction was created by bitcoin-qt, it starts with length of data directly:

[4d]49[00]3046....

I take into brackets unnecessary bytes.

So, someone added 2 bytes to signature script, but did not break signature and changed id of transaction. Original tx was deleted from blockchain.info. Next link no longer works: https://blockchain.info/tx/ef74c1cbf0003fc4e96a87a59838f7dd3da488d9d83fec3f270b0d3d7c2bc309?show_adv=true

Look at wiki for more information about scripts: https://en.bitcoin.it/wiki/Script


is it possible to be able to buy cryptocurrencies other than bitcoin, litecoin and eth with USD

Your issue makes no sense; the price of the intermediary currency is irrelevant.

Say you want to buy $600 worth of Bloopcoin. Bloopcoin's exchange rate is around $60 per Bloop, so you expect to get 10 Bloop.

Unfortunately only markets to buy with BTC are available, and (assume) BTC's exchange rate is $6000 per BTC. You can still buy 0.1 BTC for $600, and then use those 0.1 BTC to buy 10 Bloop.

If BTC were instead to be at $12000 per BTC, you'd only be able to buy 0.05 BTC for $600; but if the Bloop exchange was $60 per Bloop, those 0.05 BTC would still buy you 10 Bloop.

I'm aware this is not a full answer to your question, but perhaps it addresses the "since price is so high" comment you made.


There are 3 approaches to backup/restore your Electrum wallet with Bitcoin, depending on whether you use Electrum to manage a HD or non-HD wallet, you may or may not have a 'seed'.

If your wallet is a HD wallet, to restore/backup your wallet, simply use the 'seed' (12 words).

If your wallet is not HD, to restore/backup your wallet, simply restore/backup your wallet via private keys.

If you don't know/care whether your wallet is HD or not, simply backup (save a copy of) the whole Electrum wallet's data file to you USB drive and move it to another computer. You can use Electrum on other computers to open the data file.

I wrote this 3 Approaches to Backup Electrum for your reference with some screenshots in more details. Hope it helps.


What are the main technical hurdles to implementing UTXO commitments?

The main bottleneck of committing to a UTXO merkle root is that it's I/O and CPU heavy to create and verify. As of today the serialized UTXO set is around 1GB and it contains almost 34000000 entries and it keeps growing. This means that a naive implementation would have to hash at least that amount of data per block plus the intermediate nodes to construct a merkle tree. This is O(n) complexity and it is generally considered poor performance. It is possible to use caching optimizations but that would use more RAM.

One possible alternative are UTXO differences that each block introduces. It works by committing a merkle root with all the UTXOs that were spent in the current block and another root that lists all the added UTXOs. For an SPV client this could work as a fraud proof, where it is possible to show that a specific output was spent on a specific height (although it is already possible to show it using ordinary transactions).

So to sum up, a full UTXO merkle root commitments are really useful but cannot be used due to poor scaling.


in PHP how to calculate full uncompressed public key from a short 02/03 pubkey?

using MDANTER's great library i managed it to work.
if anyone needs it in the future.
use Elliptic\EC;
$ec = new EC('secp256k1');
$pub="026a04ab98d9e4774ad806e302dddeb63bea16b5cb5f223ee77478e861bb583eb3";
$key = $ec->keyFromPublic($pub, 'hex');
print_r($key);


Breaking down the hex value for output 1

Values from 1-75 represent a number of bytes to be pushed into the stack. I that case, 14 hex is 20 dec, and will push the 20 bytes of the hash160.


Building trading bots that interact with the exchanges is very similar to interacting with other RESTful APIs. Basically, you make query objects to whichever exchange you like to use. Here is a simple example: https://github.com/AdamCox9/nickelbot/blob/master/adapters/poloniex/poloniex_lib.php

Nickelbot is development platform written in PHP that has all the boilerplate code for interacting with several exchanges. You can write a bot once, like https://github.com/AdamCox9/nickelbot/blob/master/bots/make_min_orders.php that will give you full control and it works with multiple exchanges.

Take a look at all the example code on https://github.com/AdamCox9/nickelbot to see exactly what you need to do.


Why is it recommended to "not send round number amounts when making payments" for increased privacy?

To understand why this is important, you need to understand how a bitcoin transaction is structured. Bitcoin uses an 'unspent transaction output' (UTXO) model, I would recommend reading through this question for more info on that.
So each transaction is composed of one or more inputs, and one or more outputs. As example, if you have a 0.50106550 BTC output, and you want to send someone a payment of 0.2 BTC, then your transaction may look like this (ignoring transaction fees, for simplicity):
Inputs: (0.50106550 BTC)  ->  Outputs: (0.2 BTC) (0.30106550 BTC)
Now consider what someone who is watching the blockchain can infer, just by looking at the amounts in this transaction. Knowing that the excess value from the input will be paid back to the user as a change output, it becomes fairly easy to infer which of the two outputs is the payment (0.2 BTC), and which is the change. This becomes even more clear when including transaction fees: the chance of ending up with a change output that has a small number of significant digits (ie, a round number) is very small! By making this inference, the observer can start to map out which outputs are owned by which user, and this is obviously not good for privacy.
On the other hand, consider the situation if the transaction is tweaked slightly, to remove the round number payment:
Inputs: (0.50106550 BTC)  ->  Outputs: (0.20010852 BTC) (0.30095698 BTC)
Now it is less clear which output is the payment, and which output is the change. As a consequence, it becomes more difficult for a third party observer to determine who owns each output from this transaction. Which one is the payment? Which one is the change? It is difficult to say, based on only the output values. Note that in this case the payment amount was increased by ~0.054%, which is relatively small.

Breaking heuristics like this represent a small gain in privacy, but it is a very simple and easy way to increase privacy nonetheless.


Not Getting shares but have decent Hashrate

What are you mining? If I'm still right old days 200mh/s was enough and 5ms/s also, but today should be already dead not?

It is still possible that pool didn't had luck in solving problem and you got no reward.

I just realised you wrote Slush's pool, which means you mine BTC, which means
pool has now 36.21Ph/s which is  36,210,000,000,000,000 hashes/sec
You have 205,000,000 hashes/sec  that means

(36,210,000,000,000,000/100=3,621×10¹⁴=1% ->205000000÷3,621×10¹⁴= 0,000000566%)

You got 0,000000566% of pool mine, if they will mine 100BTC, it will be 0,0000566BTC for you per day... It is still not enough per day to make transaction... Wait a month and let us know here...

With having pool not luck seems not possible since they have written:

Luck 1,7,30days : 128%, 121%, 89%


Double spend in transaction with multiple inputs

A transaction either gets confirmed in its entirety (by being included in a block) or none at all. If one of the inputs is successfully doublespent, then your tx is invalid so will never be confirmed.


The amount of Bitcoin a successful miner can claim for himself is currentBlockReward + transaction fees. If there are a lot of fees, a block can be worth more than others.

When users send transactions, they can attach a transaction fee by assigning less to the transactions' recipients than the inputs' total. The unassigned amount can be claimed as transaction fee: Inputs - outputs = Transaction Fee

Example: In: 0.005BTC, Out: 0.004BTC ⇒ Transaction Fee: 0.001BTC

When miners work to confirm a block, they include their individual Coinbase Transaction in the transaction data that they are trying to confirm. This Coinbase Transaction spends the block reward and transaction fees to an address of the miner's choosing. This means that a miner assigns his own reward when he successfully finds a block.

However, after a block is found, every node will check whether the block adheres to the rules: The sum of all transaction outputs in a block must be smaller than all transaction inputs and the block reward, i.e. the miner may only assign the free floating transaction fees and the current block reward to himself.

sum(BlockOutputs) ≤ sum(BlockInputs) + BlockReward

It has happened in the past that a miner claimed less than he could have. In that case the remainder is lost to the network.

Also see the related questions:

Who gets Bitcoin transaction fees?
What exactly is Mining?


A security need for Bitcoin to fork to quantum resistant algorithm in a few years?

asymmetric ciphers

Ones based on specific primitives, like RSA and ECDSA specifically.

  Symmetric algorithms are supposed to be safe.

With approximately half the number of bits of security due to Grover's algorithm.

  Which components of the bitcoin blockchain would be exposed to quantum attacks?

The security of SHA256 would be halved, ECDSA would be weaked beyond usability. In Bitcoin raw ECDSA keys are typically only exposed during the portion of time when the transaction is signed and when it is confirmed, assuming that there are not large chain reorganisations ("double spending") during this time, the window of opportunity is relatively limited.

Due to the way many pieces of software re-use keys, this is not the case for a large portion of the total Bitcoin in existence however. More than 10B USD worth of UTXOs are stored in addresses with known ECDSA public keys, which would be the obvious target for anybody to steal.

  Are these components relevant the the blockchain's full functionality if they get "broken" or just minor nuisance but no major negative impact?

Generally speaking, all money would be vulnerable to being stolen without consequence or interaction from its owner.

  what could be feasible methods to make these above components more resistant against quantums?

Bitcoin has upgrade paths available to it to use quantum safe cryptography like hash based signatures if such a thing were necessary in the future, but there's not a lot of strong evidence to suggest that true quantum computers that are capable of running the sort of algorithms will ever exist. We would expect to see gradual progress towards it rather than a definitive success story about it anyway, which gives a lot of room for making these sorts of changes.

Why don't we use hash based cryptography today? It's fairly awful and to be avoided unless necessary.                           Signatures are extremely large, public keys are even larger, and they don't allow for interesting constructions like is the case with ECDSA / Schnorr.


What happens to Dash wallet if PC is formatted?

I haven't used Dash, but they say it's based on Bitcoin-QT (from Bitcoin Core).  Assuming they operate similarly, then in order to recover coins, you need both your wallet.dat file and your passphrase.  If you don't have them both, your coins would be lost.  So you should keep secure and reliable backups.

Some wallet clients can give you a "mnemonic phrase" (not the same as a passphrase) which can be used all by itself to recover your coins.  However, Bitcoin Core is not one of them, so I assume Dash doesn't support this either.


I run a service to crack wallet files and, yes, it is possible to recover funds from MultiBit wallet files.

Usually users password-protect their MultiBit wallet files and if this is the case and you have no idea what the password is, then typically the effort brute-force is too high.

Since this is a wide topic with many tools to use, I advice to start looking at https://github.com/gurnec/btcrecover and then google for more details. PM me if you get stuck in the process.


Ardor: How to decide if an asset can be send?

In most cases you should use the unconfirmedBalanceNQT. Think about it as spendable balance i.e. your total balance minus coins/asset shares/currency units locked for various reasons such unfulfilled coin exchange orders.


Unstuck a unconfirmed transaction with Coinomi

It's generally not possible to cancel BTC transactions after they are broadcast to the network. If the transaction is valid, it can be held by miners until it's economically interesting for them to confirm the transaction (until there are no other transactions paying higher fees).
When you say "double spending", you are probably referring to a technique called "Child pays for parent" (CPFP). This involves making a new transaction spending the leftover change of the original transaction, but using a high fee. Miners can only confirm the child transaction after confirming the parent. By using high fees for the former, miners will be more incentivized into confirming the latter.
To do this in Coinomi, first check the original transaction on the block explorer. Unless you sent your full balance, you should see 2 destination addresses. One is the real destination, the other is your change. Take note of the change address (if there is no change, you can't do CPFP). Second, open your BTC wallet in Coinomi and at the top right corner of the screen select "... / Show unspent outputs". From the outputs list, select all addresses that are not your change address from the transaction and set them as "do not spend". Back to the BTC wallet in Coinomi, copy your own receive address, and make a transaction sending your full balance to it. Set "high" priority fees, or custom set a fee even higher than that if the transaction is urgent. After the new transaction confirms, reset your outputs back to spendable.
PS: Replace by fee (RBF) is a feature that allows increasing the fees of unconfirmed transactions without making a completely new transaction, and will be available in a future update.
PS2: you can contact support directly via support.coinomi.com


If all block chain copies get deleted, what would happen?

The only time when the actual block data is needed is when other peers are fetching the blocks from you, or when you need to rescan for new wallet transactions.

However, the blocks you have already verified and processed are no longer needed by you yourself. Your node would not reset its state, as it still has the result of validating those blocks (the set of the remaining unspent transaction outputs). You could even mine new blocks still, and broadcast them, and other peers (who were similarly caught up already) would accept them as if nothing happened.

Of course, there are safety checks, and your client will not start when block files are missing. If those would be disabled, and everyone did this, and everyone deleted their blocks, the only effect would be that new nodes would not be able to synchronize anymore.

A future version of the reference client (possibly 0.10.0) will support "pruning", namely actively delete block files after validation when they're old enough. This will make your node stop advertizing as a full node, but it will keep functioning without lessened security otherwise.


Which mobile clients allow payments using Near Field Communications (NFC)?

Andreas Schildbach's open-source Bitcoin wallet supports this feature. With the "Request bitcoins" screen open, tap another device to send it the bitcoin: URI to send to (that opens the "Send bitcoins" screen on the other device). You can also scan an NFC tag containing a bitcoin: URI to open the "Send bitcoins" screen with the fields filled in.


When and where to add extra information when signing P2SH raw transaction?

Bitcoin Core's signrawtransaction RPC does not know about the specific type of script you're trying to sign for, and won't be usable.

You'll need to implement the signing logic yourself.


What multi-sig wallets are there for Android/Jolla?

If I go slightly of topic I will recomend you to incorporate a solution using a law of trusts if your law system has it incorporated.

I am still about to recommend you Copay wallet as it is open-source. You can even rebrand it to your own company.

You have to remember that you can use HD wallet with Copay. You can use Bitcoin Trezor with copay so you have strong security. And all of this could be saved to a secure place.


Java (Oracle and not JavaScript) is typically one of two competing paradigms for enterprise servers. The other is windows, assuming that Java is always paired with some enterprise version of Linux. So though you can completely use Java on windows servers without any loss of utility or performance, in the setting that you were to use Java you would just likely use Linux as windows has a competing programing paradigm known as c#. Also the comparison here is rough and not meant to be lliteral 1 to 1 map of c# to Java.

That said the primary reason for Java is complete hardware abstraction and portability of programs. A side effect of this is easier scalability. New server hardware can come online and completely and automatically join existing server hardware in running Java.

Java is probably one of the most high level software languages there are. In that you can deal with primarily abstract computational notions with out dealing with often repetitive and frankly independent aspects of everyday computers in their present formats. Additionally this could be why Java has some following in academia. You can study the abstract computational problems instead of some standard publication which may go out of date. In theory some Java software will never be outdated or obsolete if correctly written.

Java as a trade off does have significant overhead. When you say c or c++, that doesn't necessarily describe it's performance as to some extent that is just a standard which describes the syntax of the language. What you may actually be thinking of is what it compiles to. Depending it can be portable executable or .exe for example or it can be microcontroller arm machine binary or a list of Opcode's ready to be read off by the processor.

Java does specify the performance because it only compiles to one thing. That is a set of codes which the Java virtual machine executes (which in turn is executed by the stuff c would produce). This is how Java gets its portability. The JVM acts as a socket or adapter from one interface to another. Therefore one person need develop the JVM for the particular machine and that's it. You can see it's high priority for Java to improve performance of its JVM's. But even still for example in c and low to hardware, you can switch out costly trig functions to rough approximation by multiplication of a constant. In for loops etc calling trig functions this might be permissible in c while rendering a Java application utterly impossible.

Finally as to mining, Java key aspect is scalability. Software in Java can easily and very neatly be written to detect say new network additions and start scheduling work for them. So you can take any computer and as long as it has a JVM, it is now part of the pool simply by starting the same Java app that everyone else is running. I'm not sure you can get this aspect as easily with c. This is partly because windows has a different philosophy on hardware OEMs partly motivated by profits and a business environment, however you can see the good it has done in its own right by the excellent diversity of windows PC hardware while still typically retaining top performance to alternatives.

Again. Though Java allows enterprise to easily gain the server power they need and minimizing headaches. Sometimes the headaches are necessary to learn but sometimes it's not what's wanted.

In any case if you model the reduction in performance due to JVM overhead, you would have to compare that to longer down time or time in bringing up new hardware. If it took you a week to get a new minor up on say windows in c, and you could of had it up in 5 miinutes on Linux distribution with Java JVM you may be losing money short term. If the mining hardware had short life span that too could improve the cause for Java. It's some what to iot and using o.s. or not. You may get better performance with your custom servo controller but if a raspberry pi gets it up and running with Linux in 1 percent of the time, realistically after only a few projects testing prototypes you begin to devalue the bare bones solution.


Is it possible to get the standard private key from a too long private key?

The question doesn't make a lot of sense. If you have something which is not a valid private key, you cannot generate a public key and an address from it.

That said, given a 300-bit string, you can interpret it as a private key in any way you want. For example, you can treat it as an integer, and the corresponding private key will be the remainder of this number divided by the order of the group. You can use this private key for both creating the address and later signing. And if you want, nothing is stopping you from storing the original 300-bit string, to be converted to the private key whenever needed. Not much sense in doing any of this, though.


What's so special about six blocks for confirming transactions?

There is nothing particularly special about six. Five blocks would take less time but provide a slightly lower level of assurance. Seven blocks would take longer but would provide a slightly higher level of assurance. Lots of services use fewer than six blocks.


As of bitcoind v10, there is support for watch-only addresses. A bitcoin address is sufficient. The bitcoin-cli command is:

bitcoin-cli importaddress "address" ( "label" rescan )

Where "address" is the address you wish to watch, "label" is an optional label for the the address, and "rescan" is a boolean of whether bitcoind should rescan all previous transactions for activity relating to "address".

The example in bitcoin-cli's documentation of the JSON-RPC command is:

curl --user myusername --data-binary '{"jsonrpc": "1.0", "id":"curltest", "method": "importaddress", "params": ["myaddress", "testing", false] }' -H 'content-type: text/plain;' http://127.0.0.1:8332/

Release notes for watch-only wallet support


This is the simplest miner I know of:

  pyminer

  This is a 'getwork' CPU mining client for bitcoin.

  It is pure-python, and therefore very, very slow.  The purpose is to
  provide a reference implementation of a miner, for study.

This doesn't support long polling, but there's a spec for that here.

:)


Mobile Android Wallet for Dash that lets you do a private dash send transaction?

No. Currently, the PrivateSend feature is only available at the Dash Core wallet (desktop). The next protocol release (12.4), expected in the second half of 2018 will include deterministic masternode lists, that will make it possible to implement PrivateSend in mobile wallets.


That format has been removed.

Use

rpcallowip=192.168.0.0/16

instead.


Why is explorers shows different difficulty values?

Blockcypher is not showing difficulty but difficulty target. You can see blockchain.info also show this under 'bits'.


How do we know that exchanges don't have trading bots going, affecting prices and our trades?

To know what is going on, it is important to understand the order book.

The order book is the set of all open orders on the exchange.
The bids and asks we see flashing indicate changes occurring on the order book.

The order book changes when these happen:

An order is added to the order book (new order is placed).
An order is removed from the order book (order is filled by a trade or order is cancelled).

Since the order book is visible to us, we can check it for any type of sketchy behavior. The order book can be compared with order books on other exchanges. Some services exist that aggregate pricing data from exchanges. See: https://www.cryptocompare.com/coins/btc/markets/USD. If we use a limit order, there is no way for an exchange to manipulate our order or trade. If they did, we would know immediately. This is because we set the limit price of course. Ultimately, exchanges could be doing malicious things behind the scenes and malicious bots could be operating on the outside. In order to know if funny business is occurring, we must understand how the market is supposed to be working. Additionally, we must protect ourselves from the malicious behavior that may exist.
Additional notes on price manipulation:

If an exchange were to manipulate prices materially, they would create an arbitrage opportunity for market participants. As market participants exploited the opportunity, the price would move toward the true price.
If an exchange were to be creating phony bids/asks, aka quote stuffing, it would require analysis of all order submissions to know that this was happening. This data would need to be made available. The SEC provides this type of data for analysis of exchange traded equity securities. This data is provided through the Market Information Data Analytics System. This type of manipulation would not affect users creating limit orders. However, it would allow the exchange to scalp every market order.

We can protect ourselves by:

Using limit orders. When we use a limit order, we set the limit
that we are willing to pay. When we look at the order book, we are looking at all prices available to choose from. At each price there is some quantity available for trade See: GDAX limit order
Avoiding market orders. If we use a market order, the price is not
specified. Thus, any price can be used to fill our order. See: GDAX market order

I have made this video discussing the order book on GDAX.  Take a look here: GDAX order book
This playlist contains the videos mentioned above along with others that may help.
Take a look here: GDAX Playlist


Although it's not covered by the specification, it seems logical to match all transaction fees (in the order in which the transactions appear in the block) against the block reward the same way other transactions are matched. The leaves only whether the block reward comes before or after the transaction fees. I think it makes the most sense to put the block reward after the transaction fees, since the block reward will always consist of uncolored coins (unless someone "pre-colors" them, which seems strange), and the convention is that uncolored coins go last.


Once a wallet file is initially created, does the reference client generate additional private keys?

When a wallet is created, it contains 100 keys in its "key pool". Only one of them is made visible, but when you create a new address, it actually just takes one key from the pool. The reason for this is so you don't need to backup your wallet.dat file after every transaction or new address,

New keys are generated every time one is pulled from the key pool, if possible, to keep the key pool at size 100. In an encrypted wallet, the passphrase is required to store new keys, so the key pool is only filled when the wallet gets unlocked.


What happens if a TX was a double spend?

The appearance of a double-spend on the network throws the status of the earlier payment into doubt.  The doubt is only resolved when one of the payments is confirmed.  As always, the more confirmations, the more certainty that the payment will be permanent.

The recipient of the payment that was double-spent is NOT notified very quickly.  The bitcoin network itself tries not to propagate double-spends.  Therefore, the earliest that recipient reliably learns of the problem is when the double-spend is actually confirmed in a block.

Even then, most wallets are not very vocal about notification.  This is an area where bitcoin could improve.  A bitcoin core improvement request initiated by Gavin Andresen does exist.


How to perform a double spend attack in websites that accept transactions with 0 confirmations?

If you are attempting a 0-confirm double spend then which transactions (if any) are included in the next block is irrelevant.  Your goal is to simply complete both transaction prior to either merchant getting notification of the other one.

The "problem" is that the network is fairly quick at passing transactions from one node to the next.  Unless you have located an inefficiency in the network, a bottleneck, or actively degrading network performnce is unlikely you will complete both transactions before the merchant sees both halves of the double spend.

An effective countermeasure would be for the merchant to introduce a short delay between the time they detect your 0-confirm transaction and when they give you access to the purchased item or service.   Say you execute a perfectly timed double spend.  The merchant sees their transaction and waits 60 seconds.  60 seconds is a long time for transactions to not propagate the network.  If at any point in that 60 seconds the merchant sees the "other" transaction you have failed.   Unlike other forms of fraud you will lose the funds as your double spend is irrevocable.  It will just be luck on which merchant gets paid.

Also many transactions are not irreversible.  Software which has a license key can have the license key revoked.  Many giftcards can be reported as stolen to freeze the funds.  Any subscription based site would grant you at most a few seconds of service before cutting you off.  Product which require physical deliver are never going to be shipped fast enough to execute a double spend.

The risk of a 0-confirm double sped is low but security can be improved by designing ultra fast low latency "super nodes".  A service provider could setup a network of Bitcoin nodes around the world with low latency links between them.  Each of these nodes would be running modified version of bitcoind to maximize the number of connections, establishing thousands or even tens of thousands of connections to peers.  No matter where the two halves of the double spend originate it would be only a few hops to a super node.

If a merchant only accepts transactions from the super node network then you would be unable to complete the double spend.  Either the network has seen both transactions and the double spend is detected or they haven't in which case one of the merchants won't give access to the item purchased.


This describes what the first node is supposed to do.  However, there's no guarantee that they will actually do it - they could be running modified software that passes along a transaction even though it is not valid.  The other nodes have no way to ensure that the first node is well behaved, except to redo the check for themselves.

This goes back to the trustless and decentralized nature of Bitcoin.  You don't want to have to rely on other people to avoid being cheated - you want to be able to verify everything independently.


There are a couple of good resources to find these:

https://en.bitcoin.it/wiki/Category:Open_Source
http://luke.dashjr.org/programs/bitcoin - bitgit

Some of my favorites fall into the following categories:

Address Generation

Brainwallet
Vanitygen

Blockchain exploration

Bitcoin ABE

Mining Pool software

Eloipool

Wallets

Armory
Electrum


As we've answered earlier today the description of what happens when 90% of the hashpower is lost is approximately accurate, although somewhat exaggerated:

  "A 90% loss will create 2 hour block intervals and take a year to resolve."

Actually, it would be 100 minute blocks and would take less than half a year even assuming that no new hashrate were added and the event were directly after a difficulty reset.

Now, luckily, no single government can intervene with 90% of the hashpower. I've seen estimates that about 60% of the hashpower is in China, which if taken out at once would be a major blow, but would only delay the network's rebalance for three weeks (five instead of two weeks for the difficulty period).

Besides, if really 90% of the hashpower were taken out at once with no chance of recovery, a lot would speak for an emergency hardfork to a new hashing algorithm, both to resolve the difficulty hike as well as evading a potential majority attack from the government(s) that took control of the 90% hashpower. While the article alludes that

  "forking is impossible without an effective voting / governance system for Bitcoin"

It seems to me that in the face of such an external attack a fork with the single purpose of changing the hashing algorithm would be achievable.

Finally, the article states:

  "Only Delegated Proof of Stake (DPOS) has the ability to remain independent of direct government control due to the much lower resource requirements for operating a node."

Which feels like an oversimplification to me. PoS is widely considered as being less secure than PoW among experts, but even so one can say certainly that it makes different security trade-offs. E.g. it is susceptible to one or a few parties holding a majority of the system's tokens, and since POS deployment often is combined with a large pre-mine, it is not hard to be concerned about the initial distribution. One must also consider that the author Daniel "dantheman" Larimer is the founder of Steemit, so it would make sense to get another opinion on the trade-offs between PoW and DPOS…


Post Bitcoin mine reward: Lowering Difficulty an Option?

The difficulty is not constantly increasing. It is increasing in response to the hashrate going up. If the hashrate would be going down instead, the difficulty would automatically go down as well.

The goal of the difficulty adjustment algorithm is to keep the average time per block at 10 minutes.

If in response to dwindling fees and/or subsidy, mining would become less profitable, we will likely see a decrease in hashrate. That would result in a reduction to the difficulty, until mining is profitable again (to some).


Yes, you will still receive Bitcoin if someone sends to your old addresses.

Electrum uses mnemonic seeds to generate private keys which has corresponding public addresses (keys) - the ones you need to provide someone to send Bitcoin over to you. This means every transaction to addresses which are generated by your mnemonic seeds will still go to your Electrum wallet even when your receiving address is now changed.

Just in case you wonder why the receiving address keeps changing time to time: the ideas of changing public address every time you receive some Bitcoins is to keep your balance info private as with a public address since one can look up and list all transactions related to it using Bitcoin explorers such as blockchain.info.


The number of confirmations indicates under how many blocks your transaction is buried. The more the confirmations, the more your transaction is secure from double-spending attacks. So the confirmations will continue growing forever - this is normal behavior.


I have written a test for an open Bitcoin Core PR. Should I open a PR to the author's fork or wait for it to be merged?

It depends on the situation. When the change is a few lines of code it is sufficient to show the author the patch and they will amend the pull request. You can do this using a ``` diff in the comments or link to your branch in the comments.
If it is a bigger change, to avoid the clutter of the GitHub UI you can surround it by <details><summary>patch to do foo</summary>```diff ... ```</details>.
However, if it is a really significant change you should probably open a PR to the author's fork of the Bitcoin Core repo asking to merge yourfork/yourbranch into PR-author/PR-branch.
One difference between posting the patch in the GitHub comments vs linking to your branch is that the former will continue to exist even after you delete your branch. Somebody may be curious to look at the patch years later.
This question was answered by vasild on IRC and has been paraphrased.
edit: Jon Atack adds that for commit sized proposals a reviewer generally provides a link to a commit in their fork of the Bitcoin Core repo (or even a link to a branch) and the PR author will then pull in the commit adding it to the PR. An example is here.

Rebased with four commits pulled in from @jnewbery's master...jnewbery:2020-07-split-already-have branch as well as the changes in #19611.


How do I cancel my blockchain transaction (still unconfirmed)?

Cancelling unconfirmed transactions is easy.   Just submit a higher fee double-spend transaction.   For example: if you sent a 0-fee transaction, it could take a day before it gets mined onto a block.   You can send another transaction with the same inputs that just sends the money back to yourself.   On this transaction you put a higher fee.   This becomes more likely to be mined and will get included in the blockchain - invalidating the slower-to-confirm original.
Some tools to help out: https://github.com/petertodd/replace-by-fee-tools


Changing a private key of a public Bitcoin address

It cannot be done.

Every private key has exactly one public key, and every public key has exactly one address (ignoring compressed/uncompressed or normal vs P2SH address, which do not matter here).


Why are some transactions unavailable in my debug window?

You need the transaction index enabled of you want to use getrawtransaction on arbitrary transactions. By default, only transactions that have unspent outputs are available.

Run bitcoind with -txindex or put txindex=1 in bitcoin.conf. You'll need to reindex.


What is the difference between Root Hash and Block Hash?

First, all transactions are hashed along a Merkle tree. The root of that tree is the Merkle root.

Then the block header is created with 6 fields: version number, the hash of the previous block, the time, the difficulty, and the Merkle root computed in the previous step.

Then that block header (which contains the Merkle root) is hashed, resulting in the block hash.


How to tell which account an unspent output is in?

Your question is based on a misunderstanding of the account system. It's a very common misunderstanding, though.

Unspent outputs are not associated with accounts.

Incoming transactions credit the balance of the account associated with the address the transaction is received with. But accounts only have a balance - they don't 'own' the coins sent to them. Account balances can go negative, and can be modified through the move command, without changing the coins.

The unspent outputs belong to the wallet as a whole, and accounts just keep track of who/what owns which amount of them - not which ones specifically. It is like keeping a wallet around with money that both belongs to you and to a friend. You keep track of how much you owe your friend, but you don't keep track of which specific notes or coins in the wallet belong to them.

To do what you want, you either need to use separate wallets (which keep the coins separately entirely), or use coin control or the raw transaction API, which allow you to specify manually which coins to use.


Random Number In R Value , what is it actually, is it the same as Nonce in the blocks

The nonce in a signature is different from the nonce used in the block header. These are unrelated to each other. They only share a name because the term nonce is a generic word that means "a number used only once."
A signature is composed of two numbers: R and s. R is the X coordinate of a random nonce k multiplied by the generator point G. It is the result of elliptic curve scalar multiplication with a point. k is a scalar, which means it is just a random integer modulo the n, the order of  G.
The nonce k must be kept private. If it is known, then anyone can compute the private key used in the signature. Additionally, reusing the same k (which results in R being the same) with the same private key will allow the private key to be computed.


How does Bitcoin utilize cryptography and secure hash algorithm (SHA) to link records in the blockchain?

A Bitcoin block is a container data structure that aggregates all the transactions. The block is made of a header (containing metadata), followed by a long list of transactions that are included in the block. The block header consists of merkle tree root, previous block header hash, timestamp amongst other metadata.

The Merkle tree root in simpler terms includes the summary of all the transactions in the block using the merkle tree. Every transaction in block is serialized and hashed twice with SHA256 to get the transaction id or txid. These txids of all the transactions in the block is then double-hashed pairwise, with SHA256, until there is only one node at the top called a merkle root. Since this merkle root is built from all the transactions in the block themselves, the root can be thought as containing the summary of all the transactions included. An illustrative example of Merkle root calculation is shown below:

The header portion of the block is hashed twice with SHA256 to get the block header hash (in the mining process). This block header hash is always referenced in the next block in the previousblockhash field. Thus every block is linked to the previous block using its header hash forming a link that goes all the way back to the genesis block like the illustration shown below:

Since SHA256 is a one way mathematical function, there is no way to reverse engineer the data by just looking at the hash. SHA256 is also deterministic, in the sense that a particular data will always give a particular hash. Slightly changing the data will completely change the hash output.

So, if a party wants to change some data in a transaction that is included in a block somewhere in the blockchain, it will change the merkle root of that block. Since merkle root forms the part of the block header, changing the merkle root will completely change the block header hash. Since this hash is referenced in the next block, the current hash will be incompatible with the hash that was referenced and hence this block will not be accepted.

This is where proof of work in mining plays a key role. As I have said above that changing a data in a block completely changes the block header. So if you want to change a data in a past block, you will have to re-mine all subsequent blocks. So you will have to spend the electricity and compute cost to re-mine all the block AND outpace the network by forming the longest chain. The cost of doing such an action is very high, and may not outweigh the benefits that you derive from it, thus providing inherent security to Bitcoin.

Also, I would like to point out that you cannot change transaction data structure at your whims and fancies. Every transaction is signed with a private key that includes the entire transaction data as a message. So, slightly changing the transaction data will render the transaction invalid and including such invalid transactions in a block will render the block invalid. So, in a nutshell all that you can do is include/exclude certain transaction from previous blocks, or make slight cosmetic changes (like ECDSA signature malleability).


Blockchain.info - generated addresses & the blockchain

Yes, all transactions to and from blockchain.info wallets will be recorded in the blockchain.  blockchain.info does not control their customers' private keys, making it impossible for them to perform offchain transactions.  In contrast, Coinbase uses internal accounting for transfers between Coinbase accounts.


Can hackers behind the ransomware WannaCry be traced through bitcoin
  transactions?

no, if they are smart enough

  Is there is central server of bitcoin

no

  where all transactions can be looked up from?

yes

  And is it possible to identify hackers from IP address used to access
  their bitcoin accounts?

no


It's possible you've hit the limit on number of transaction inputs for the wallet software (or total tx size).

Some wallets have a feature to "sweep dust", meaning consolidating all of those small UTXOs (unspent tx outputs). Note this will cost a small amount for tx fees. If it doesn't have this option, you can just make a few large transfers to an address you own using the same wallet (this will also cost tx fees).


cannot get bitcoind working on ubuntu 12.04

Try to overwrite the existing version:

sudo dpkg -i --force-overwrite /var/cache/apt/archives/bitcoind_0.8.5-precise1_amd64.deb


Do you receive interest on Peercoin if you use an online wallet?

If it is a web wallet that holds your private keys, then it is certainly possible that the service is staking your coins for you, but this may or may not be a feature that the developers of the particular web wallet have implemented. It is also possible that the web wallet creators take the stake as a payment for their service, which I hope the service would be transparent about.

If the web wallet is a watch-only wallet, then it cannot stake for you. [1]


Does the Share Difficulty given to each miner matter?

Increasing your submission difficulty will reduce the number of shares you submit, in turn reducing your bandwidth costs and your pool's bandwidth requirements.

The downside for you as a miner is that increasing your share submission difficulty increases your variance in earnings. If you mine at a pool with user determined share submission difficulty (such as HHTT and Itzod) then it's up to you to decide how much variance you can bear. I've covered in detail the amount by which your earnings variance increases with increasing share difficulty elsewhere, and you may want to look there for specific details.

Otherwise, at pools which automatically change submission difficulty to keep you submitting at a constant number of shares per minute, the variance should not be noticeable over an hour, and definitely not noticeable over a day.


Improving transaction handling in shops: Is sending "prepared/approved/signed" transactions to a shop owner possible?

This is not currently possible nor is it secure at all whatsoever.

  So, as the customer at the counter, what if I could prepare a transaction of the required amount, from my wallet-app on the phone, somehow approve it/sign it/authenticate it, but not send it to the bitcoin network yet.

This is possible, but only if the customer knows what address to send the Bitcoin to. If he does not, then this won't work.

  Instead, I send the transaction to the shop owner, via bluetooth, QR-Code, NFC whatever. The shop owner takes this transaction, validates it against the current amount on the contained address/es. The idea is that this should guarantee to the shop owner that he or she will actually be able to retrieve the amount on a later time.

Doing that does not guarantee that the shop owner will receive any money. All that guarantees is that the shop owner has seen the transaction and can broadcast it himself. However the customer could perform a double spend attempt and have it occur successfully if the shop owner does not immediately broadcast the transaction. This is because the customer still has the information necessary to create a conflicting transaction (i.e. the private keys) and just broadcast that to the network. Simply handing over a transaction does not mean that it is suddenly impossible for that person to create a new transaction that sends the money elsewhere.

  At the end of the day, the shop owner takes all collected transactions, blends them into an new single one (to save bytes) and now sends this transaction to the bitcoin network. This single transaction should be cheap and more efficient compared to single transactions from all day's clients.

That is not possible. No one can modify those transactions except the people who own the private keys. They cannot be "blended" with each other unless the person doing that "blending" controls all of the private keys associated with those transactions. "blending" would require creating a new transaction that spends the same outputs and creates a different output. It is an entirely new transaction which requires the customers' private keys in order to create.


Can you "undo" an nlockTime transaction by spending a single UTXO of it before lockTime's block happens?

Since one of the inputs of the nLockTime transaction has been spent already, the nLockTime transaction becomes invalid, as not all referenced inputs are available for spending.

This is described in the Bitcoin developers guide explicitly as a way to cancel a locktime transaction:

  If any of the signers change their mind, they can create a new non-locktime transaction. The new transaction will use, as one of its inputs, one of the same outputs which was used as an input to the locktime transaction. This makes the locktime transaction invalid if the new transaction is added to the block chain before the time lock expires.

Before the time or block height specified for the nLockTime transaction is reached, the transaction is considered invalid and will not be stored or relayed by (other) nodes. This has been weakened in 0.9.0 so that transactions one block within nLockTime are accepted for relay but not yet for inclusion.


To be honest, you came in a little too late. Mining is now done by ASIC's (Application Specific Integrated Circuit). These are chips (like the ones Intel and AMD make) that are only capable of hashing SHA-256. These chips are very limited (they can't run any other software), but can do what they were made to do extremely fast.

An Intel 'universal' CPU can do somwhere around 1.2 million SHA-256 calculations (it is also running an Operating System in most cases), whereas an ASIC chip can calculate these hashes at around 4 billion a second, per chip. That's 4000 times as much. Also, when these chips are made to connect over Serial or USB, you could hook up 100 of these on one computer or Raspberry pi. It is quite difficult to scale up CPU's the same way.

Your best bet at mining would be to buy an ASIC miner and do a lot of research (preferably in opposite order; research first...). It is really easy to buy a miner right now and not make ROI (Return On Investment) because of the rising difficulty in Bitcoin. The rise of difficulty is stagnating a bit, but it is still rising. So please do some more reseach and know what you're getting yourself into.

Source: I have been mining myself for over a year now. I started out with graphics card mining and actually lost 1700 euros (2040 bucks) on the equipment. I now own ASIC miners and make a bit of profit every month. It takes me about 10 hours a week for maintenance, financial administration, trading/selling of (alt-)coins and I am still 'in the red' for about 800 euros (960 bucks). I like it a lot, even though my wife is not so happy with the space the miners take, the electrical bill being 400 euros higher each month, our house sounding like a server center and me spending more time on mining than on something else. Also, in the summer it's like I live in the tropics, with the heat generated by the miners.


Given some time for network latency, do messages reach absolutely all connected peers and how long it takes for them to do that?

Usually, standard transactions that pay a sufficient fee to be acceptable to most mempools, without any conflicts on the network will reach almost all nodes within a minute or so.

However, there is no guarantee whatsoever that it will reach all nodes. Every node has its own relay policy, and even perfectly correctly behaving nodes may choose not to relay anything at all.

Most of the delay is due to intentional delay in the propagation. Random delays are added before forwarding in order to obscure the source of transactions. Each hop on average takes 5-10 seconds.

Bitcoin has a subsystem with absolute propagagion guarantees though - the blockchain. While obviously subject to not being partitioned off the network, every node eventually learns the best chain. There are no guarantees on how long that takes, or which transactions are included in it.


How to uncompress a compressed private key?

Ok I answered my own question. From: https://github.com/pointbiz/bitaddress.org/blob/master/src/bitcoinjs-lib.eckey.js#L186-L222

bytes = Bitcoin.Base58.decode(compressed_or_uncompressed_private_key);

After some processing, this bytes-array can then be re-encoded into a compressed or uncompressed private key.


Would it be possible for a cryptocurrency to have a price before its first block?

It's actually pretty common for new cryptocurrencies to have a "pre-mine" meaning that some part of the future coin issuance is assigned to public keys in advance. Investors pay the development team before the miners start generating blocks at a fixed price (that is not determined by market forces) and provide a public key. Then when the genesis block is released, all these coins are finally "real".
Ethereum was launched with such a premine. You can see all the coins generated in their genesis block that were paid for in advance.


What is the bandwidth of the standard bitcoin client as at August 2013?

Since we've already asked this question, let's try to re-answer it with some additional insights:

Without mining or relaying, in order to participate in the network, one would need enough time to download all transactions within a block before the next block is found in order to stay synced with the network. Considering that a block has a maximum size of 1 Megabyte and that the block time is about 10 minutes, this puts the theoretical minimum download speed at about 1 Megabyte per 10 minutes or 1.7kbps (according to Google)-- much slower than a dial up modem. Notice that this figure is constant -- so the size of network does not dictate how much bandwidth is required to participate in the network, so this was true in 2011 and will be true in the future.

In the original question, we wanted to run a wallet from work. If all we want to do is trade bitcoin, this should be fine (provided that you do download the initial values for the block chain outside of work), but to do more on the network...

If we're relaying transactions, not just downloading them, the calculations can vary wildly. Here our bandwidth should be proportional to the number of transactions posted per second (which should be predictable) as well as the number of node to which you are connected (which isn't easily predictable).

If we're mining, you're going to have to broadcast your mined blocks, which as mentioned before, can have a maximum size of 1 MB, and you're going to want to broadcast this as fast possible -- not just within the 10 minutes. You could put the theoretical minimum required upload speed at 1.7kbps, but it's simply not practical.

I realize that this doesn't the question about how much average-bandwidth clients us, but if you're only posting and reading transactions, we shouldn't need more than about 1.7kbps. If you begin mining and relaying, we're going to need more, but it's hard to predict how much.


Is the Mycelium HD wallet private key stored encrypted on the device?

Yes, Mycelium stores an encrypted copy of your key, protected by your PIN (if applicable) on the device. This includes any individual private key accounts you import.

In general, I would advise against storing crypto keys (or any private keys or confidential information, really) on a corporate device (laptops, phones, desktops, email accounts), or even a device others can access regularly.


Bitcoin compilation error: conflicting declaration

I needed to remove stale files from old builds, just run make clean.

https://github.com/bitcoin/bitcoin/issues/16479#issuecomment-515791321


Help! Unconfirmed transaction for the past 12 hours!

There is currently a backlog of about 69,000 unconfirmed Bitcoin transactions and only the transactions with the highest fees will be confirmed until the backlog clears.

  Please help me!

For similar situations going forward, you have a few options:

Submit your transaction to the ViaBTC Transaction Accelerator
If you control either of the receiving addresses, send a new transaction from one of them with a much larger fee, encouraging a miner to pick up the whole chain of transactions (Child-Pays-For-Parent).
Wait. The transaction should be either confirmed or removed from the memory pool within about 72 hours.

21.co has a good fee estimator for future transactions.


What are the risks of running an online store via a bitcoind connection using less than the minimum of 8 connections?

In theory, only one reliable connection to a trustworthy node is sufficient. If you do decide to limit your connections only to 2 outgoing ones, make sure to connect to nodes you trust to be up to date, to reduce the chance of falling behind, or worse, being the target of an attack.


High activity on exchanges vs. low transaction rate on blockchain

Given that every transaction on an exchange requires also a transaction on the blockchain, how does it work?

They don't, movements on exchanges are internal, not Bitcoin transactions.


Only the wallet.dat file is specific to the wallet. You can stop the client, swap out the wallet.dat file for a different wallet, and then launch the client again. You may need to start the client with the -rescan option -- the client will do the right thing automatically in most cases, but there are a few corner cases it mishandles without -rescan.


Using Docker version of Lightning Network daemon to gain understanding

The documentation you are following is using the bitcoind wallet, so the address generated in Step1 will be derived from your bitcoind master private key.

Checking the current c-lightning documentation, this seems outdated, step 3 and 4 are no longer needed.

Q1: this returns an address from the bitcoind wallet
Q2: you send a bitcoin transaction from any wallet you like, here the local bitcoind (Bitcoin Core) node is used.
Q4: here, you notify lightningd to use the funds when opening channels. But no channel is opened and thus no funds are committed to the Lightning Network yet. (as mentioned, seems obsolete now with current release)


Which of the open-source Bitcoin clients has the most thoroughly commented source code?

I remembered that I had seen answer to that question somewhere, after searching a bit I found it here.

Check out BitCoinJ (a from scratch bitcoin implementation in Java) and
BitCoinSharp (a C# port of BitCoinJ). They are not full
implementations yet, but they are very far along and can do most of
the tasks of a bitcoin client.
No matter what language you plan to create your implementation in,
looking at these is very valuable because they are very thoroughly
commented and much easier to understand than the official C++ client.

weird, because it's the answer to your other question.


Just download from https://nxt.org/download/ unzip, go to folder and ./run.sh
Then go to your browser open up nxt by going to http://127.0.0.1:7876/

Hopefully this helps.


What is the variable valertpubkey in net.cpp for?

One of the people who holds the private key corresponding to that public key (Satoshi, theymos, Gavin, and unspecified others) has the ability to send a message out to everyone on the network. This has been used in the past to tell people about security vulnerabilities in the client.

  Can someone explain what it exactly means and how will it affect me if I want to simulate a network of 1000 or more nodes on a private network in regtest mode ?

Assuming you're not testing the alert system, it won't affect you.


How does the p2p network monitor the validity of a transaction?

in order for a transaction to be added to the pool of valid transactions that will be added to the chain block by the miners, at least 51% of the nodes/peers need to review that transaction and see that the public key issuing it A) has the funds to issue it, and B) has not spent them in another transaction.

This is incorrect, there is no requirement for a certain number or percentage of network peers to review or validate a transaction before it is included in a block. A transaction is either valid, or not.

Validation is done at the scale of each individual node: each node can validate a transaction on its own, and know that it is valid, without relying on any other node to confirm this info for them. An overview of the transaction validity rules can be found here.  Only valid transactions can be included in blocks, so miners will validate transactions before including them in a block they are mining. Including a non-valid transaction would make the block invalid, so miners are incentivized to make sure they only include valid transactions.

In fact, miners can include transactions that were not broadcast to the network first, so that the rest of the network will first hear about the transaction when they receive that miner's new block (assuming the miner finds a valid block, of course). As long as the block is valid (which requires all transactions to be valid), this is just fine, no 51% majority is needed.


Can OTC help lessen the cost of slippage and exchange rate risk?

Bitcoin is compatible with almost any financial contract or derivative that exists today.

I think the scenario you are describing is this:

Bob must pay to Alice $1,000 USD worth of bitcoins.
Bob has $1,000 USD to send to Alice but has not yet bought the bitcoins.  What ways are available to Bob that allows him to send the funds to Alice without exposure to exchange rate risk.

You didn't mention a time component so there are two scenarios.  One is where there is immediate settlement -- Bob wants to pay Alice the funds now.

Since there is no "official" exchange rate, what is widely accepted as being an accurate or fair price at any point in time is whatever the "last" trade shows from the BTC/USD market on Mt. Gox.

Other exchanges may have higher or lower spot market rates.  At an exchange with good liquidity, that relatively smaller amount can be purchased at the spot market in a single transaction (without slippage) and the bitcoins can then be delivered to Alice immediately.  Because there was essentially no time that elapsed after the bitcoins were purchased before delivery to Alice, there was then no exposure to exchange rate risk.

Presumably you are inquiring about this for amounts that are larger where slippage would occur.

There are traders who perform arbitrage (automated with bots, or performed manually) and generally remove price inefficiencies between the markets.  This brings additional liquidity to the exchanges.

Even if arbitrage were to keep the exchange rates between the exchange markets in exact synch, they only act after Bob has made purchases, thus he either loses to slippage when buying in bigger chunks or he exposes himself to exchange rate risk when buying over time.  If Bob's purchasing is detected, other traders might become aware of his buying and frontrun him, causing him to realize actual exchange rate risk.  And Bob also loses because the arbitrage providers are absorbing some of the value in the process.

There are few options to Bob to avoid both slippage and exchange rate risk, other than to contract that work out by using a trader or broker who can minimize these factors.

Now if the amount owed to Alice is not until some future point in time, Bob could consider buying a CALL option, ensuring a supply of bitcoins at a future date at price known today (and thus protects hum from a price move to the upside).

Bob could instead buy the bitcoins today and then hedge against exchange rate risk by buying a PUT option (which allows him to gain should the exchange rate fall after he makes his purchase before he delivers the coins to Alice).

Now obviously, if Bob deals solely in fiat, and Alice deals solely in fiat, then why even bring bitcoin in the middle?  A bank wire transfer works pretty well for this for immediate (e.g., same-day) settlement of larger amount, and other methods are less expensive for future delivery.

There is even the ability to use USD vouchers (redeemable codes) for this.  Bob does a bank transfer to his account at the same exchange that Alice uses.  He then sends Alice a redeemable code for 1,000.  Some exchanges allow this, but generally there are limits as the exchange offers these voucher codes presumng the customer overall is using those funds for trading bitcoins and not just withdrawing the fiat after redeeming the codes.

So to summarize, trades of larger transaction amounts cause slippage and there is not currently an efficient method that takes advantage of the supply from the over-the-counter markets to minimize the market inefficiency similar to wha other, more mature, financial trading ecosystems provide.  That may come, it just isn't available today.


What are the most popular crypto currencies after Bitcoin?

If an online store accepts another crypto-currency appart from Bitcoin, you can be sure 90% of the time it'll be Litecoin (most accept just Bitcoin as of now). It's the one that has the 2nd biggest market capitalization and market depth as well. As to what could be the 3rd most popular, that's difficult.

"Popularity" is difficult to measure directly, but you can use value in fiat as a proxy. Right now, several crypto-coins are valuable about 1 US dollar or more: just go to cryptsy or to coinwarzand check the market prices (given in bitcoins). Given current prices of bitcoin in USD anything more valuable than one milli-bitcoin is worth aprox. a dollar, a lot of coins are worth more.

Another proxy you can take is how frequently you see ads of people asking for donations or offering their services in exchange of that currency - that way, you'll see humble dogecoin being asked/offered a lot, where as protoshares/quarks are almost never asked for in spite of their value. Other coins worth more than a dollar (like prime, name or PPC) would take the lead here based on this metric.


Where can I set the fee value for accepting transactions?

Note that the transactions are chosen by the client you issue your getwork requests to. If you're mining in a pool, the pool chooses the transactions.

The key settings are in the main.h file. Look at MIN_TX_FEE and MIN_RELAY_TX_FEE.

To accept non-standard transactions, comment out these lines in main.cpp:

// Rather not work on nonstandard transactions (unless -testnet)
if (!fTestNet && !IsStandard())
    return error("AcceptToMemoryPool() : nonstandard transaction type")

Note that if you accept transactions with less than the normal transaction fees, you should connect to Luke Dash Jr.'s node to make sure you get such transactions, since most clients won't relay them to you. Add -addnode=173.242.112.53 to the command line you use to start your client.


what is the different between bitcoin network and the bitcoin protocol

Bitcoin Network is a network of computers connected to each other in peer-to-peer fashion whereas a Bitcoin Protocol is/are the rules that govern this network.

Now, this computer that is a part of the Bitcoin network run a software which makes this Bitcoin Network and its functionalities possible, this software follows some rule/protocol which is nothing but Bitcoin Protocol.


Why did my lightning node not route payments after I have funded 5 payment channels?

First of all welcome to the lightning network and keep asking excellent questions!

the important information is within the result of the listfunds command. For example here:

"channel_sat": 500000,
"channel_total_sat": 500000,

The channel_total_sat says that the capacity of your channel is 500k satoshi. Whereas the channel_sat says that you own 500k satoshi of that capacity.

Since you have opened these channels and you did not spend money yet your channels cannot be used for routing or for receiving money. You would to find a person to open a channel with you that provides you with incoming capacity.

I wanted to open a channel with you to provide you with some inbound capacity but I cannot peer and connect with you:

lightning-cli connect 035aef5661e1a6e370db60dc0455796800afd5b51fbc12a0a8b34836b15f5d7ef6
{ "code" : -1, "message" : "220.133.223.206:9735: Connection establishment: Connection refused. " }

is your node behind a firewall and did you open port 9735?

The Time lock detla values can be configured by any node and do not have to match other nodes (though other nodes could decide not to use you for routing if your time lock values are too high). The meaning of those values are the time lock that is set in your HTLCs which are outputs in your commitment transactions used for routing. They technically only become relevant if the channel gets closed while a payment is routed. It is the time your node has to claim the funds with a blockchain transaction.

As for the 1ml payment I cannot help you. from your listfunds command I can only see that there is one channel (that is probably in the process of being closed right now) that suggests that you did not pay an invoice to them and something went wrong but I can't debug that with the information you have given.


Is there a forum-like exchange for trading Bitcoins person-to-person?

LocalBitcoins.com has person-to-person PayPal trading:

http://localbitcoins.com/buy-bitcoins-online/paypal

https://localbitcoins.com/sell-bitcoins-online/paypal/

There are also discussion forums where people frequently discuss about PayPal, avoiding fraud there, etc. Here is an example:

https://localbitcoins.com/forums/#!/trading#getting-paypal-scammedive

LocalBitcoins.com has also trusted buyers list where you can set your trading parties trusted and make trading offers available only for them (to avoid scammers).


create/sign/send raw transaction from specific Wallet account

This is not possible and you should also mind, that the accounting system in bitcoin-core has been marked for deprecation.

The rawtx commands to not cooperate with accounts.

If possible, you should avoid accounts.


Are there any attacks with a plurality of computing power?

In a certain sense, all 51% attacks are really plurality attacks, but you have to consider all honest users as forming a single "coordinated group".  (Which is true when you think about it: they are all following the intended protocol as implemented by standard software.)

Suppose for example that 30% of hash power is controlled by honest miners, 32% by Cartel X, and 38% by Cartel Y.  The honest miners are mining on the main chain.  Cartel X wants to reverse a transaction that appeared in some previous block A, so they are mining on a side chain that diverges from the main chain at block A-1.  Cartel Y wants to reverse a different transaction that appeared in a previous block B, so are likewise mining on their own side chain from B-1.

Given enough time, Cartel Y's chain will eventually be longer than either the "honest" chain or the chain produced by Cartel X, so it will become the official record.  Cartel Y will be successful in reversing their transaction, and Cartel X will not.

The 51% figure is based on the assumption that all miners who are not part of the attacking cartel are honest.  But if some of them are part of a competing cartel, then a plurality indeed suffices, assuming you count all honest miners as a cartel of their own.

In principle something similar could happen in the event of a blockchain fork, where honest miners could split into two or more non-cooperating groups mining on distinct chains.  In that case an attacker controlling more hash power than either group could mount a 51% attack also.


Unable to use `blocks` and `chainstate` from external drive

This got resolved but not sure why specifying path in bitcoin.conf for datadir doesn't work.
Workaround:
Open "%UserProfile%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Bitcoin Core"
Right click on "Bitcoin Core (64-bit)" and go to properties.
The target for this shortcut should be "C:\Program Files\Bitcoin\bitcoin-qt.exe" -datadir=F:\bitcoin-mainnet
OR
Open command prompt/powershell and run "bitcoin-qt.exe" with datadir path
C:\Program Files\Bitcoin>bitcoin-qt.exe -datadir="F:\bitcoin-mainnet"


I want to buy some xrp and hold them offline

Download "ripple-paper-wallet" https://github.com/OctillionSA/ripple-paper-wallet
Open index.html (HTML/javascript) in a browser (on a PC without Internet, better a fresh new OS).
Write down or Print out your paper wallet.
The public key starts with "r" is your Ripple address.
The private key starts with "s" is your "Secret", keep it safe! You can also use it in case you want to migrate your wallet to online GateHub or to any other wallets. (but it won't be a cold storage after that)
Activate this wallet by sending small amount 20XRP (or more) to the address. (You can activate it here: https://bithomp.com/activation/)
Make sure you address is visible in the explorer: (https://bithomp.com/explorer/).
You can "erase" PC which you used, or just turn it off together with the printer to clean memory.

Congrats: Now you can send big amounts to this address.

P.S: You can also buy a Hard Wallet. like "Ledger wallet" for example. - also a secure way to keep your XRP.


Bitcoin "accounts" feature - Is it practical or scalable?

As mentioned in the page you linked, it is a bit awkward to use Bitcoin-qt's accounts system. Don't bother with accounts as they are intended to be a way to manage your money within the program. When you're having thousands of accounts you are already doing it wrong.

So how do you structure a service to do this?

Handle accounts completely on your database. When you generate an address, store it as a field under a user in whatever database table/collection you have for users. This will allow you to quickly and easily scale your address counts in the event you grow large, Bitcoind does not scale well.

Handling receives

This is awkward to do with the current state of Bitcoind, the program never really intended to support large services. Bitcoind can efficiently detect receives to addresses in wallet. When you use the RPC interface and use the "getnewaddress" command, Bitcoind will store it in it's wallet. I've tested out Bitcoind with a million addresses before, it takes a solid half hour to start up but receives are snappy with no noticeable slowness.

Use walletnotify and/or blocknotify to get new transactions and blocks. Those two are arguments you can put in the bitcoin.conf file that specify a program to run when one transaction or block happens. Walletnotify is called per new transaction to or from an address in wallet.dat and gives a notification when it receives the transaction (unconfirmed) and then again when it's in a block (1 confirm). Blocknotify works per block. See the suggestions on how to use walletnotify here.

Just load the hashes walletnotify gives you in a database and then on block check if each one has enough confirmations, be thoughtful of the fact that Bitcoind usually has 2 walletnotify events per txn (one for unconfirmed and one for when a txn makes it into a block). And make sure the program you call is light weight and quick.

The pro method

This ways a bit advanced, rarely used and you will need some C++/Java/Python/Go proficiency. The community have made many Bitcoin implementations available as open-source libraries you can link to. Many larger services simply need more complexity with receiving transaction and better scalability, which Bitcoind struggles to provide.

It's a lot more work but you can make your own "node" with features you need easily with the libraries available for a wide range of languages. For Java there's BitcoinJ, widely depended on and reliable. For C++ there is Libbitcoin, which has pretty good examples and looks simple. Python has a bunch of node implementations and modules. Even Golang has something pretty popular.

If you need examples, Github has a lot you can find on search.


When opening a LN channel using LND, what does 'push-amt' do?

The money now belongs to the counterparty in the channel you opened. In every one of your channels, whether you opened them or they were opened to you, "local balance" refers to your spendable/forwardable balance and "remote balance" refers to the counterparty's.

Don't worry though, if your node stays online reliably, then others will open channels with you, giving you inbound capacity. At this stage there's not much else you can do.


There has been a bitcoin billboard on the Lawrence Expressway in Silicon Valley, California, paid for by memmorydealers.com.

Also the same company paid for a radio advertisement across a number of US radio stations I believe.


Integrate Bitcoin price in Google Sheets through Google Script

I suggest using a library for this.
This is the one I use: link
Code would then be: =CRYPTOFINANCE("COINMARKETCAP:ETH/USD", "price")
The library explains itself rather well.


Is it possible to create a disposable address identical to mine?

You have been scammed.

The address with one symbol changed is invalid and all bitcoin cliends reject sending bitcoins to it. So, your partner lies. Tell him to give you a link for his transaction on block-explorer site like blockchain.info

  Now my question, is it possible to create an address similar to mine, but change 1 letter/number?

No. It is not possible.


What would be the easiest way to make my bitcoins into real us money?

https://localbitcoins.com/ will show real people to trade with (online or by cash). It has Feedback system so you can check the person you will trading with.


How can I set a fixed fee sufficient for transaction success in bitcoind?

You can try:

txconfirmtarget=1

If paytxfee is not set, include enough fee so transactions begin confirmation on average within n blocks (default: 6).

So putting it equal to 1 will automatically set the fee to be included in the next block.

Note that this isn't a "fixed amount solution".


Is there any later version of Bitcoin address generation, than 1?

Yes, there are P2SH addresses, specified in BIP13. They were introduced in 2012 together with the P2SH consensus rule change. They use Base58 version number 5, and are mostly used for multisig constructions (where multiple parties/devices need to sign off on a transaction).

Recently Bech32 addresses were proposed in BIP173, to enable sending to native SegWit addresses. These addresses are easier to read/write, more compact in QR codes, and have better error detection properties. Native SegWit outputs are cheaper to spend and offer a higher security level (disclaimer: I authored BIP173).


Where can I find the current Ripple version number?

Start the client at http://ripple.com/client, the version number is written at the bottom.

Currently it's 0.1.17


Click on payouts tab and you will see the payouts there. Disregard the graph on dashboard. The graph will populate once you reach payout threshold of .4 xmr...


Egoistic miners combined with large transactions destroy PoW?

I think what you're describing is a 51% attack, but with a 3rd party that is not a miner, incentivizing the miner's 'bad behaviour'. Even with an off-blockchain bribe, you would need 51%+ of miners to make this attack work (otherwise the 'original chain' would always outrun the 'bribed chain').

So, if an 'egoistic' miner wanted to perform this attack, I think it would make more sense for them to do it for their own transaction, not for someone else. Performing this attack with the involvement of a third party only increases the risk for the miner (what if the third party doesn't pay the bribe? etc). I think it makes more sense for a miner to just perform the attack themselves: send 1000 btc to an exchange, convert to altcoin, withdraw, and then roll back the btc chain to remove the transaction that sent coins to the exchange.

There is a reason this sort of attack hasn't occurred: miners see it as being less profitable in the long run.


Could Bitcoin work without block subsidy and transaction fees?

Bitcoin would have to be changed heavily for that to work.

Here are some of the issues with that:

Initial money distribution: Currently, all new coins are introduced into the system through the block subsidy. If there is no block subsidy, how does anyone ever get any coins?
Security against majority attack: The mining reward (consisting of block subsidy and fees) incentivizes miners to invest money into hardware and to spend irretrievable resources (power). Why would they make investments or mine at a loss, when there is no reward? Perhaps some honest users waiting for confirmation of their transactions would mine until a block is discovered and they get their transaction confirmed, and then stop again. Perhaps some people would even mine at a loss just because they can.
However, the hash rate of the network would be minuscule, and an attacker e.g. with a botnet could easily overwhelm it, and start a majority attack.
Additionally, previously attackers could usually earn more by supporting the network than by attacking it (unless they provided already a majority of the hash rate by themselves). Now, there is no reward to support the network, so an attack is always more lucrative than supporting the network.
Transaction ordering: Currently, transactions are prioritized by their fee rate. Transactions that pay more per byte get selected for confirmation first. If transactions were free in general, people could send an unlimited amount of transactions. They could for example use the Bitcoin blockchain as cheap decentralized backup for their data. However, you say that there is some sort of anti-spam measure in place. Another problem still exists: How do you decide which transactions get confirmed first? "First come, first served" could work to some degree, but if more transactions are submitted to the network than get confirmed, waiting times for confirmations grow indefinitely.

There are some Proof-of-Stake systems that don't have a block reward. ( Instead they created all coins at genesis and distributed them in some fashion to the initial user base. However, Proof-of-Stake doesn't cost the expenditure of irretrievable resources. AFAIK, transactions in PoS systems still cost a transaction fee.


Why did Dan Kaminsky say that Bitcoin is dependent on the Federal Reserve?

Once upon a time someone used Bitcoin's ability to embed arbitrary text inside a transaction to put an ASCII Art Ben Bernanke into the blockchain. Referring to the fact that current blocks must still reference the Bernanke block as a "dependency" rounds out the joke.


Bitcoin QR code on a product sold in stores

Putting a bitcoin payment address (in QR code format, or otherwise) is generally not the way to accept bitcoin for a sale. There would be very basic vulnerabilities, such as having someone swap the payment address displayed on your product, etc. Attempting to use the same address on every product is bad for privacy/fungibility, and it makes backend accounting difficult.

Accepting Bitcoin for payments is best done using a bitcoin payment processor such as BTCPayServer (an open source project), or for small scale you could even process payments manually at the till. In either case, customers would be presented with a payment address during checkout, not a payment address per product.


To test if my wallet.dat encryption password is correct, MUST I spend coins?

As you are using the Bitcoin Core wallet you can look at the right bottom if your wallet is locked or unlocked in the padlock icon.
Go to Window > Console and type: walletpassphrase "your passphrase" 60
After you type this command and you get an Error "The wallet passphrase entered was incorrect" that means your passphrase is wrong so you can try it again by typing the command again.
If you can enter the correct passphrase you will get "null" as a response and you will see the padlock icon as unlocked.


Why does blockchain.info API response with wrong balance value?

The two quantities are equal but expressed in different units. 1 Satoshi = 10^(-8) BTC.


Hidden fees in a transaction: How to anticipate one and avoid another?

I understand that the "dynamic network fee" is part of the process of operating the blockchain and cannot be avoided. But how can I anticipate in advance how much to expect this fee to be?

Without knowing how the exchange operates their wallet internally, this is unpredictable. Many exchanges will display an estimate for the transaction fee, but the transaction fee itself all depends on how they work. The transaction fee is not based on the amount being transacted; rather it is based on the size in bytes of the transaction itself. This size cannot be known without knowing how the exchange is creating their transactions.

I've read that it's possible to transact bitcoin without using an exchange, and I suppose this would eliminate the price premium. What does one have to do in order to transact without an exchange?

You simply download and install a Bitcoin wallet software and use it to receive and send Bitcoin. The wallet software will allow you to create Bitcoin addresses which you can give out in order to receive Bitcoin. It will also allow you to send Bitcoin to addresses that you have received from others. Bitcoin.org has a page which lists out some wallet software that you can download.


Can I send almost 1MB transaction?

To be able to send a transaction that a miner will accept, that transaction has to be a standard transaction. As defined in policy.h

/** The maximum weight for transactions we're willing to relay/mine */
static const unsigned int MAX_STANDARD_TX_WEIGHT = 400000;

For non-Segwit transactions, the limit is 400,000 KB / 4 = 100,000 B = 100 kB.

Therefore, if you have a Pre-Segwit transaction larger than 100 kB but smaller than the block s̶i̶z̶e weight limit, you should contact a miner, and they'll be able to add your transaction to their block manually, if it's profitable for them.


Anonymous transactions technology for a cryptocoin?

CoinJoin in Bitcoin does not provide full anonymity and Darksend feature in Darkcoin is merely an implementation of the CoinJoin specification. CryptoNote, on the other hand, allows for completely anonymous transactions through ring signatures and one-time keys. It’s also blockchain analysis resistant. If you are looking to invest in CryptoNote-based coin, Bytecoin is the one to go for. It’s been around for two years (launched in 2012). Has no premine (at least there’s no evidence for that). The developers’ team is reliable and committed. The community is growing steadily. Check out this website http://bytecoin.org/