Will the decreasing Bitcoin production cause a liquidity crisis? Based on the fact that the bitcoin "production" will stop around 21 million bitcoins, could this lead to a bitcoin flow freeze?

What I mean is, if we produce all 21 million bitcoins, and keep using them nicely (without inflation issues because there will be no more making of them) wouldn't some pals need more bitcoins than others? And a lot of users wouldn't want to use them through stores, debit cards and/or gift cards? Then how will the currency recycle?

Bitcoin's reward rate isn't constant - it halves every 4 years, and eventually stops entirely in 2140.

https://en.bitcoin.it/wiki/File:Controlled_supply-supply_over_block_height.png

See also: The End of Mining


Cloud mining contracts I don't get it. How it can be profitable even in theory? F.e. if someone has a machine that earns say 2$ per day, why would he want to lease this machine for 1$ for some stranger and give him this 2$ if he can just run this machine for himself and take the whole 2$ in his own pocket?

Intelligent people ask intelligent questions.

Indeed it is true that if a particular setup can profit $2 per day there is seemingly no sensible reason to lease it out for $1 a day when you could have the $2 a day yourself - it would make more economic sense to lease it out for $3 a day.

From another perspective, someone who wants to mine can forgo the initial outlay for mining equipment and hire mining power for a fee. It is possibly not true, also considering the cost of running the machine, that leasing mining power may be more cost effective than purchasing and housing mining equipment yourself - most high-power mining equipment is also quite loud. It is still to consider that the equipment you lease may have lower costs for power and cooling than you could provide.


What security features are built in to the standard Bitcoin software? I have read much of the Bitcoin algorithm and its encryption basis, however little has been said of the software's inherent security.

What solutions are already built in to the software, and what is planned?

Problems I see:

At the moment it uses IRC networks for locating others. (IRC is fairly insecure and easily taken out with simple DDoS)
Wallets have not been encrypted by default. (Physical or remote access to the hard drive provides anyone with the wallet without even so much as a passphrase.)
Wallets are complex data structures with no backup tools. (They cannot be easily backed up to a physical hard copy or a secured digital copy. At least not without using 3rd party software such as PGP or TrueCrypt.)
The server communication protocols default to plain text instead of SSL or some other encrypted traffic.

Essentially, almost none. But all of the problems aren't really particularly serious or the proposed solutions don't really help anyway.

The latest version of the client doesn't use IRC by default, though it's still supported to help older clients find newer clients. Instead, DNS is used. But these really aren't points of failure because a list of known working legitimate nodes is hard coded into the client. And as soon as you can find one node, it can send you the current list of working nodes anyway.

Wallets aren't encrypted by default, but if they were, we'd be flooded with "I forgot my wallet password" complaints and people would lose their Bitcoins anyway. Also, there are complex technical reasons why password-protecting the wallet won't actually work against the typical threat model (mass distributed malware with specific Bitcoin knowledge).

The client supports a 'backup wallet' command. But the wallet is in BerkeleyDB format. I wish the client had a native wallet format specifically for backups. There is work on fully deterministic wallets, so you can 'backup' your wallet just by knowing a passphrase even with no backup files at all. This is a legitimate issue and one that's being worked on.

The server does default to plain text, but it also defaults to localhost communication only and you must configure a password to run it in server mode. (There's no issue in GUI mode.)

These issues are all being worked on. The client is pretty raw at the moment, definitely.


How to generate legacy receiving address in Bitcoin core 0.19.x.x I must have missed the memo.  I see Bitcoin Core 19.1.0.1 defaults to generating Bech32 receive addresses (prefixed with "bc1"), and offers a checkmark to generate P2SH addresses instead (prefixed with "3").

But if I want to generate the legacy P2PKH addresses I know and love (prefixed with "1"), it seems I need to drop into the console and run something like:

getnewaddress("mylabel","legacy")

Is there a way to do that in the GUI?

From within the GUI, no, and this is intentional. There is no reason to use P2PKH addresses anymore. If you need backwards compatibility, then that's what the P2SH checkbox is for.

But if you really must have P2PKH addresses, you can configure Bitcoin Core to only use them by adding addresstype=legacy to your bitcoin.conf file. If you want your change to also be P2PKH, you will need to set changetype=legacy as well.


Block first transaction The Bitcoin wiki states:

  the first transaction of a block is, with few exceptions, the
  transaction that grants those coins to their recipient (the miner)

How are those "few exceptions"? When is the first transaction of a block not the miner reward?

Based on bitcoin source code: https://github.com/bitcoin/bitcoin/blob/0.8.6/src/main.cpp#L2112 a valid block should have the Coinbase transaction (the one that spends the rewards and fees) as the first transaction and no other coinbase transactions must appear in the block.
Spending the full reward and fees is not enforced.

So your answer is only invalid blocks do not have a Coinbase transaction or have it at a different position from the first one.
But that transaction can be used to send the coins to any address not only miners one, so maybe there has been blocks using the coinbase transaction to pay for goods or pay other people different from the miner (for example Eligius pool uses it to pay the shares directly).


Scripting multiple cgminer processes / running on a router I'm running TomatoUSB (a Linux-based firmware) on a Broadcom-based home router. Connected to the router's USB port is a 7-port D-Link hub and a number of Asicminer USB Block Erupters.

Am finding some curious behaviors using this cgminer 3.3.1 binary as so:

./cgminer -o pool:port -u username.worker -p password

A single cgminer instantiation will crunch at the advertised 333 MH/s rate if one USB device is connected. But that number drops off precipitously when additional devices are added.

Interestingly, adding the "--usb :1" flag (which restricts the process to using one hotplug device) and then firing n processes this way gives me 333*n as hoped.

(I think) I need a worker for each process (not a huge issue I suppose). However on a headless system as this is, running these separately can get unwieldy very quickly. Currently I'm running one SSH client window for each process and firing each from the command line.

Is there a convenient way to script a number of these to be fired at once, each using one hotplug device, and hopefully redirecting the numerous console outputs somewhere useful? Maybe somehow share a configuration file among many processes?

That's an interesting approach. It's probably cheaper than a Raspberry Pi.

Put your startup script in a file:

./cgminer -o pool:port -u username.worker -p password --usb :$1

Save to start_single.sh, then

$ chmod u+x start_single.sh

Make the final script:

NUM_MINERS = 7
cd "$(dirname "$0")"
parallel -j $NUM_MINERS -- ./start_single.sh $(seq 1 $NUM_MINERS)

Save as start_all.sh, then

$ chmod u+x start_all.sh

Run ./start_all.sh to mine.

If you want to start the script on startup, google 'TomatoUSB start program on startup'


PCI (no express) GPUs I have a mining rig, with 2 PCIe (already being used) and 4 PCIs without use. I was thinking to buy a PCI based ATI card like http://www.club-3d.com/index.php/products/reader.en/product/radeon-hd-5450-pci-noiseless-edition.html but I was wondering if anybody has experience running PCI GPUs to mine.

EDIT: to avoid off-topic:

I'm not interested in FPGA or ASIC. I just want to know if the card cited is able to, for example, do opencl.

You can actually pick up a PCI to PCI-E 1x (open end) adapter and plug in any video card you want. Then use a PCI-E 1x to 16x adapter. This is an example, but there are cheaper ones out there.

http://www.quill.com/startech-pci-cards/cbs/352874.html?cm_mmc=SEM_PLA_T_352874


What is the most important parts of the video card in Bitcoin mining? For example, obviously it doesn't matter what type of adapters a video card offers when it comes to Bitcoin mining? Is the GPU speed or the amount of RAM the most important part in terms of megahashes per second?

SHA256 does not require much, but if you intend to use it for scrypt mining too, it's said that memory is most important, i.e. speed and size.


What would be required to disincentivize mining pools? Now that mining pools are starting to hit the 51% cusp of total mining power, what would need to happen to the Bitcoin protocol to reduce their success, and encourage distributed mining power over pools?

It doesn't matter if a mining pool has 100% of the total mining power so long as that mining pool can't choose which transactions its users work on, prevent them from submitting blocks that they find, or choose which blocks they build from. No change is needed to the Bitcoin protocol as far as I know. Only the protocol used between pools and their clients needs to be changed.


Open source ASIC design plans in Hardware Description Language (HDL) format? Are there any freely-available ("open source") ASIC design plans in, e.g., HDL or AHDL format(s)?

No. ASIC designs are all proprietary. This is controlled to the point where gaining information about the use for packaged chips is subject to a highly restrictive NDA. Some optimizations in use are non-public, and at any rate nobody is going to give away millions or tens of millions of dollars worth of NRE cost to their competitors. It seems unlikely that any of the older manufacturers will make their designs open source, as most have collapsed since selling their devices. The public manufacturers like BFL, HashFast, CoinTerra, ASICminer have all struggled to even exist after selling their devices due to the large NRE cost and difficult market for the devices.

There are however some ancient FPGA miner designs written in VHDL which are open source.

https://github.com/fpgaminer/Open-Source-FPGA-Bitcoin-Miner

They aren't very much use to anyone for practical use but may give some idea of how hardware miners function. ASIC miners are significantly more efficient than FPGA miners even on the same process, especially now that some are moving to regulator-less supply rail chaining designs, so there is no realistic chance of this information being profitable for anybody at this point in time.


What is necessary for a Hotel to accept Bitcoin as a payment method? I manage a hotel and the owner is interested in using Bitcoin as a payment option. How can we start to use this option and what will we need? There are multiple hotels he owns and would like to eventually get all of them using this option as well.

Depends on your budget or technical expertise I guess.

A. Install a wallet and create a new address. Post this address on the hotel's website and you are ready. This is the low tech solution and you would manually have to check the balance to see what payments are received.

B. Use a gateway like BitPay. It works like a Paypal for Bitcoins. The payment will be handled by BitPay and BitPay will send the coins to your address or convert them to fiat currency for you. This is probably the option you are looking for but BitPay takes a little fee of course. Coinbase or BIPS are alternatives.

C. Hire a developer to do the integration for you. This lets you customize the way you want it but is probably way more expensive.


Bitcoins sent to address i cannot access, funds are unused Pls Help me get them back So yesterday i was sending some bitcoin to deposit on my whaleclub.co account like i had done once previous before with no issues, although this time it is saying that my bitcoins were sent to a different address other than mine. As i look at my coinbase transactions and follow the transaction my sent bitcoins remain in that address. How do i get them back ? Any help would be awesome.

If you are able to see in the blockchain transactions that your amount remained sent to the correct address - then I would contact the support centre with  whaleclub.co.

If you can verify in the blockchain that your btw was sent the correct address, then it sounds like an issue on the receiving end?

Not sure if this helps.


Using QR codes for bitcoin giveaway Suppose I wanted to have a bitcoin treasure hunt, where QR codes were used. The first person who scanned a given QR code should receive some preset amount of bitcoins. Is this possible? (Preferably with as little need for knowledge on the part of the recipient as possible.) As a bonus, is it possible to have a single QR code to have a "pool" of 5 bitcoins it is attached to, give 1 bitcoin away per scan, but only allow scanning by unique devices. (ie; so 1 QR code could be used to claim 1 bitcoin for 5 unique devices) or easiest just to create 5 QR codes? Essentially the same functionality as the "send to QR code" in the Android client, only in reverse - (Scan QR code, and receive coins)

The easiest way to do this is to have the QR code be a URL. For example, http://www.example.com/bitcoingiveaway/E34IKJ. Just assign a unique code to each location, the E34IKJ in my example.

What that web page does is up to you. It has to track how many times it has been accessed, of course. The first time, it can send a form that allows a person to fill in some kind of identifier, which can be a Bitcoin address. You then send them the coins (or if using some kind of account, credit their account).

Making this work without the scanners having Internet access is much trickier. It can be done, but it would require your to control the scanning devices such that they included a time stamp, and there would be no way to reliably inform people whether they were first right at the point of scan.

Another possibility for the "first come, get coins" model is to have the QR code be the actual private key used to claim the Bitcoins.


Difference (if any) between proof-of-work in mining bitcoin vs verifying transaction I'm trying to understand the proof-of-work idea for verifying a transaction. I think I understand why proof of work is needed to verify transactions (essentially to prevent spoofing/double spending etc).

But my understanding is this:

the proof of work for verifying a transaction is the same as for mining a new bitcoin
if this is the case, then it becomes harder and harder to verify transactions.

I'm pretty certain the first statement is false, in which case I'd like to know what exactly is the proof-of-work for verifying a transaction.

I think I understand why proof of work is needed to verify
  transactions (essentially to prevent spoofing/double spending etc).

This is right.

  the proof of work for verifying a transaction is the same as for
  mining a new bitcoin

This is right too.

  if this is the case, then it becomes harder and harder to verify
  transactions.

It depends it can become harder as it can become easier. But whatever happens there is no issue with that.

Explanations:

The miner generates blocks which header have the lowest possible sha256 hash until he finds one which sha256 is lower than the Target. This block will be valid and can then be included in the blockchain. Inside of the block the first transaction is different from the others because it hasn't a valid input and it has as transaction output an address controlled by the miner. This address will receive the block reward(new bitcoins that are generated with the block) as well as the transaction fees of
the transactions that were included in the block.

Now actually it's true that generating new blocks become more and more difficult because there are more and more miners with more and more sophisticated mining material.
This is why the target becomes more and more lower in order to maintain an average time between each generated block of about 10minutes.
But if miners will start to stop mining bitcoin the target will increase and mining will become easier again.

This post will help you to understand a little bit better what are the different components of a block.
Bitcoin: 285 bytes that changed the world


Like Banks, are there better service providers from Bitcoins banks? Can I Find a rating? I would like to purchase Bitcoins, I am looking and honestly do not know what I am looking at.  Is there a place to see how these Bitcoin places are rated? Services they provide?

Looks like you need a honest seller with low risks involved. Go for Coinbase.com if you are in the US. You could check their gov issued licenses for buying and selling bitcoins here: https://www.coinbase.com/legal/licenses


Have a look to https://blockchain.info/tx/055f9c6dc094cf21fa224e1eb4a54ee3cc44ae9daa8aa47f98df5c73c48997f9?show_adv=true

At the bottom of the page you can see "disassembled" output scripts. Yes, outputs 0, 1 and 2 have the form of 1 pushdata33 pushdata33 2 CHECKMULTISIG so these outputs are 1-of-2 multisig outputs. But you should look even deeper! The compressed form of public key is 33 bytes long and must start with 02 or 03 in hex representation. What do you see on that page? The lines

20434e545250525459000000140001a9e0e85838b5000000174876e800010053b6
20a3c3000000000000000000000000000000000000000000000000000000000000
100000000000000000000000000000000000000000000000000000000000000000

do not start with 02 or 03 so they are not public keys. It may be some garbage or another protocol layer like a counterparty. I do not know.

The modern Bitcoin Core client does not try to convert these chunks of bytes to a public keys and does not try to create human readable addresses. So, you see only one address 1FrbMcddiM1v3HMpUqygjZYCamBykWCWao in console. This is not a bug, this is a feature.


Discrepancy in the blockchain size There are approximately 700,000 blocks as of March 2021 [1]. How comes the blockchain size is only ~350 GB [2] and not 700 GB given that the block size is 1 MB?
Thank you for your help.

1 MB was the maximum Bitcoin block size until 2017, not the size of each block. In the early years there were few transactions and most blocks were almost empty.
After the august 2017 segwit soft fork, the way how the transactions size are measured and the maximum space available has changed, now blocks can be bigger than 1 MB.
If you are interested, you can find here how the things works now: https://en.bitcoin.it/wiki/Weight_units
This is the historical chart of Bitcoin average block size

currently the average block size is about 1.33 MB

Edit: I have updated my answer to take into account the changes introduced with segwit soft fork.


When will the Bitcoin Cash difficulty adjust next? Bitcoin Cash adjusts its difficulty downwards if there is, roughly speaking, a 12 hour gap between blocks. At least that's my understanding.

Difficulty has dropped to about a quarter of what it was because if that and more blocks are coming in now.

Does this not mean that the new difficulty rules will no longer be triggered now? It seems difficulty has adjusted enough to never again trigger the rules with high likelihood.

That would mean that the next difficulty change happens through the regular mechanism. This regularly happens every two weeks but because the hash rate is still so low it could be far longer than that.

The last 30 blocks took about 21 hours. Normally, 21 hours would have produced 126 blocks on average. So it seems the speed we are seeing is roughly a quarter of the normal speed despite the lower difficulty.

And that seems to imply that this difficulty period will take roughly 8 weeks to complete assuming that the hash rate on that chain stays the same.

Is this assessment correct?

The original bitcoin adjusted difficulty every 2016 blocks, which would nominally be 14 days @ 6 blocks per hour.  The 238th such adjustment is due at block 479,808, and we are presently (early 4 Aug 2017) at 478,620 or 1188 blocks away on BCC.  I assume the original adjustment interval has not been changed.  35 blocks were generated in the last 24 hours, so at that rate it will take 34 days to adjust (~5 weeks).  However, miners can jump in and out of BCC according to price/difficulty ratio relative to BTC, since they use the same mining hardware and just different software.  So I expect the mining hash rate to be variable.

Note that BCC allows for larger blocks, and several have been mined that are >1 MB.  So even at 1/4 the block rate, theoretical capacity is twice that of BTC.  BCC transaction rate is running about 1/8 of BTC, so blocks are currently nowhere near full.  Since many exchanges and wallets are not yet set up to handle the forked coin, volume is likely to grow over the next month or two.


Main Differences from Counterparty vs NXT Assets Exchange (SecureAE) What are the main differences from counterparty and NXT asset exchange? I've been testing out the nxt asset exchange using http://www.secureae.com and using counterwallet. They both seem to be solid products and they both use a separate coin to do their transactions. What other major factors does one need to know before going with one of these decentralized asset exchanges?

Counterparty is based on the Bitcoin blockchain while NXT is not.
This site compares Colored Coins with Mastercoin with Counterparty, it might be helpful to you: http://www.bitcoin2comparator.org/


Error when mining with MacMiner I am super new and I understand none of this. I am using MacMiner (the recent version). I opened up the FPGA/ASIC Miner and I get this error when I try to run it.
    [2021-04-15 15:05:52] Timers: Using clock_gettime(CLOCK_MONOTONIC_RAW)
 [2021-04-15 15:05:52] Global quota greatest common denominator set to 1
 [2021-04-15 15:05:52] setrlimit: Changed soft fd limit from 4864 to 1024 (FD_SETSIZE=1024; hard limit=unlimited)
 [2021-04-15 15:05:52] Started bfgminer 5.5.0-unknown
 [2021-04-15 15:05:52] Loaded configuration file /Users/ (I am taking this out since it is my name ) /Library/Application Support/MacMiner/bfgurls.conf
 [2021-04-15 15:05:52] DISPLAY not set, setting :0 just in case
 [2021-04-15 15:05:52] CL Platform 0 vendor: Apple
 [2021-04-15 15:05:52] CL Platform 0 name: Apple
 [2021-04-15 15:05:52] CL Platform 0 version: OpenCL 1.2 (Jan  5 2021 23:17:05)
 [2021-04-15 15:05:52] Platform 0 devices: 1
 [2021-04-15 15:05:52]  0   Intel(R) Iris(TM) Graphics 6100
 [2021-04-15 15:05:52] Unable to load ati adl library
 [2021-04-15 15:05:52] Probing for an alive pool
 [2021-04-15 15:05:52] Testing pool stratum+tcp://us-east.stratum.slushpool.com:3333
 [2021-04-15 15:05:52] HTTP request failed: Protocol "stratum+tcp" not supported or disabled in libcurl
 [2021-04-15 15:05:52] Failed to connect in json_rpc_call
 [2021-04-15 15:05:52] initiate_stratum with sockbuf=0x0

How would I fix this? I understand none of this.

I suspect the source of the problem is this line

HTTP request failed: Protocol "stratum+tcp" not supported or disabled in libcurl

libcurl is a library (developed for the command-line "curl" program that can be used to fetch web-pages).
I suspect the most likely way to fix your problem is by updating MacMiner to the latest version and by checking that your computer also has the latest version of the libcurl library (using whatever package manager is appropriate for your computer)
I'm not familar with MacMiner or slushpool but you may also be able to configure MacMiner to use HTTP instead of STRATUM+TCP?


Can one recover the full list of public keys generated in electrum with the seed/private key? I used the wallet.change_gap_limit command in the electrum console in order to generate some 20.000 public keys.
Would I be able to recover all of these using my seed after completely removing electrum from my system, reinstalling it and running the change_gap_limit command again?

Yes.

As a plan B if that fails, you should be able to use piped bitcoin explorer bx commands offline. This is because Electrum v2.0 and above uses the same BIP 32 Hierarchical Deterministic (HD) technology that bx supports.

However, the Electrum HD paths are different from the BIP 44 convention. See It appears Electrum uses: m/0/0 for wallet addresses and m/1/0 for change addresses. Additionally, the English Electrum Seed Word List is quite different from the newer English BIP 39 Seed Word List, and I don't believe Electrum uses a PBKDF2 stretching function that is not invertible. See stretch->passlib.pbkdf2 for high level details for what bx mnemonic-to-seed is doing. Unlike BIP 39, an Electrum private key should be invertible to a group of Electrum seed words.

For the synthesis of BIP 44 paths for Bitcoin m/44'/0'/0'/0/0 private key and M/44'/0'/0'/0/0 public address using bx, see Example 7. See BIP 44 path-levels.  The change level is set to 0 for external addresses that you share with others to receive funds. The change level is set to 1 for a wallet's internal return addresses.

If the information above is too pedantic, read Chapter 5 of the Mastering Bitcoin Book. Albeit, details about Electrum are scarce.


Keep or Transfer Coins after mining reward? I've been mining ZEC (pool) for the past month and noticed that most of the other people in the pool never had any balance on their wallets if I viewed them on the zcash blockexplorer.

Is there a reason why people immediately transfer their coins to a different wallet?

Is there a reason why people immediately transfer their coins to a
  different wallet?

If someone will hacking that mining pool, his able to steal all users coins. Move money to the cold-storage is a good practice. They're also can just move money to the exchange.


Why does the "uptime" RPC API call fail if Bitcoin Core is running but has not synced fully? At least this appears to be the case, because the function I have created to determine whether Bitcoin Core is "working" does the most minimal/simple API call I could find, which was "uptime", to see if my system can still communicate with Bitcoin Core (on the same computer) or if something has broken.

Since the blockchain has grown to an insane size, I was forced to move my Bitcoin "datadir" from a SSD disk to a mechanical one (due to running out of space on the former). Around the same time, I also configured Bitcoin Core to always use Tor for all connections. The combination of these two things caused the unexpected issue that my "is everything OK still?" script fails for Bitcoin Core when I start the computer after a night's sleep, because Bitcoin Core takes longer than before to get ready. Sometimes it can take like half an hour.

(This same thing also affects my polls for checking the current balance, which at least is understandable because Bitcoin Core probably doesn't want to report an outdated figure if the new data about to be fetched changes the balance.)

All it says in the manual is this: https://bitcoincore.org/en/doc/0.18.0/rpc/control/uptime/

(For some reason, there's no API docs for 0.18.1... the latest version is 0.18.)

My questions:

Is this a known issue/bug? Will it be fixed soon?
Should I be using some other API call to check if Bitcoin Core is running and "can talk to me"?
Is there a separate API call I could use to determine whether Bitcoin Core is "all ready for action" (fully synced)?

The node does not need to sync fully in order for RPC to start responding to queries.

What happens is Bitcoin Core starts up in "warm up" mode. During warm up RPC is unavailable because the system is being setup. This is when wallets, the network your local UTXO information, setting the block index and verifying your local blocks take place. (I suspect you may have confused the "Verifying blocks..." message with sync'ing.). In warmup mode RPC port 8333 is open but it'll return a JSON error for every query. The open port signals to inbound connecting peers that there's a node there, but not yet able to respond to queries.

After this warmup routine is done (takes a few minutes), the node will be up and syncing from the network. During the sync, even if it takes weeks, the RPC server is up. Obviously it will not be able to respond to queries for blocks it hasn't retrieved and verified yet.

  Is this a known issue/bug? Will it be fixed soon?

Not a bug. It's part of how Bitcoin Core starts up.

  Should I be using some other API call to check if Bitcoin Core is running and "can talk to me"?

Try the help command. If it returns, it means the RPC server is up.

  Is there a separate API call I could use to determine whether Bitcoin Core is "all ready for action" (fully synced)?

You can try using getblockcount to see what the last synced block height is. It's fully synced if the height is same as network height. Again you don't need this to use RPC, but I included this to answer your question.

Try getrpcinfo to check on the RPC server status.

Check other API methods here.


In what respect is Bitcoin "programmable cash"? In my local Bitcoin meetup, someone said Bitcoin is "programmable cash".
Can someone please explain if and to what respect this is true? I read about a few BIP (Bitcoin improvement proposals) that specify something about that, but I'm not sure I'm getting the complete picture.
Thanks in advance for your help!

Bitcoin transactions are essentially the movement of coins, by encumbering the coins with a restriction on who may redeem them. Bitcoin's internal scripting language is used to accomplish this.The restrictions can be overcome by the owner of the coins, since only they can meet the requirements of that script.

An example is a pay-to-pubkey script. The network interprets this as: whoever can produce a signature from the private key of this public key, can spend the coins. It looks like this:
[public key] OP_CHECKSIG.

To redeem the coins, one provides a the right signature.

Scripts can have varying degrees of complexity. For example:
OP_IF OP_2 [pubkey1] [pubkey2] OP_2 OP_CHECKMULTISIG OP_ELSE [publickey3] OP_CHECKSIG OP_ENDIF.

This script ensures that coins can only be redeemed if the owners of pubkey1 and pubkey2 provide a signature for a suggested transaction, OR, if the owner of publickey3 provides a signature. If either of these conditions are met, then the coins can be spent. That makes it programmable on a very low level.

Scripts are evaluated by the network whenever a transaction occurs, ensuring that the signatures or data which is provided actually meets the needs of the restrictions on the funds.

And although distinct to bitcoins scripting language, since bitcoin software is usually networked to maintain up-to-date knowledge on which transactions are currently spent and unspent, you could write applications to move money around without any human intervention.

In a sense, most payments API's are programmable cash, but the scripting language bitcoin uses is as low as you can get.


How can I recover my MultiBit HD wallet words? I have problem with MultiBit HD. Its balance changed to an unconfirmed transaction just like in this bug report.

It appears that I need to use my wallet words to recover the balance, but I have lost (totally lost, there is no chance of recovering) the wallet words.
But given that I've got list of all possible words used in MultiBit HD and my wallet can I use it in some cracking program to find my words and their order in which they occur?

I do not have any experience with brute force or cracking, I'm just a regular, lame computer user.

If you have both your wallet file (named mbhd.wallet.aes for MultiBit HD) and its password, you can use this tool to extract its mnemonic sentence/seed.

Note that the terms "brute force" and "crack" weren't the right ones to use, you're simply decrypting the wallet file. David's answer is correct in that you can't brute force a seed from scratch, but luckily that's not what you need to do here.

(Also, be sure to write your seed down somewhere once you have it! If you had lost your wallet file, you would have been out of luck...)


is bitcoind reliable when depending on it for web services? What I mean by the title is, say If I create a service with bitcoind being used to create and store large numbers of accounts and address, is it likely to take the strain? Can I setup multiple instances of bitcoind to access information about the network or would I need to one large instance of a bitcoin daemon to handle everything?

If not is there an alternative to be used that can keep up with an expanding web service?

I think bitcoind is perfectly suitable for it, if you can securely access it via RPC.

You can easily create a separate bitcoind instance when you experience that only one instance cannot handle the load, but keep in mind that a bitcoind instance can only send coins it has the private key from, so you will have to separate all your queries into two parts, one for every instance.


Cannot make valid Bitcoin Cash transaction I've been way in over my head hacking around in various Python Bitcoin libraries. From what I understand, input public keys have to be compressed to be accepted. Is that correct? I have an uncompressed address that I am trying to send funds from.

If I compress the input public key it shows the input address as the compressed version which shows no balance in block explorers. However, I get a Signature must be zero for failed CHECK(MULTI)SIG operation error when I try to broadcast this transaction.

This is the transaction: 0100000001edc990f08c1ddd5102dfc7f4af32e7927a14fd8d0bc9996725f38ede549b91f8010000008b483045022100ed2a0f6644ff41b9baba8c35356a414b3da24edaea1bf68396efc7ffcbc5b8e902207b1b22c6201c2e4975cbbfc869632d4a2c89b46477b71ef6f875f1c844346d4d414104e1c33577152151109fe5e02c600f386fda865594c1b989ce0fcfbc0fb0b144a2c8fd98053fd86a4ccc7e0dcbcdd6a15c38eb32a27b3653c54f78ba00ffd71d19ffffffff0238300000000000001976a9141a586975175967c83e2b90422bcd8af9a623156288acfdc20d00000000001976a91470fb690a177e8721098d90284ab3c3304ee19cd588ac00000000

If I do not compress the input I get this error: Script failed an OP_EQUALVERIFY operation

And this is the uncompressed key transaction: 0100000001edc990f08c1ddd5102dfc7f4af32e7927a14fd8d0bc9996725f38ede549b91f8010000006b483045022100ed2a0f6644ff41b9baba8c35356a414b3da24edaea1bf68396efc7ffcbc5b8e902207b1b22c6201c2e4975cbbfc869632d4a2c89b46477b71ef6f875f1c844346d4d412103e1c33577152151109fe5e02c600f386fda865594c1b989ce0fcfbc0fb0b144a2ffffffff0238300000000000001976a9141a586975175967c83e2b90422bcd8af9a623156288acfdc20d00000000001976a91470fb690a177e8721098d90284ab3c3304ee19cd588ac00000000

Am I correct in understanding that OP_CHECKSIG comes after OP_EQUALVERIFY, so the first transaction is closer to being valid? And thus all I need to do is fix the signature? Or is there something else I'm missing?

Thank you!

first (uncompressed pubkey):

sendrawtransaction 0100000001edc990f08c1ddd5102dfc7f4af32e7927a14fd8d0bc9996725f38ede549b91f8010000008b483045022100ed2a0f6644ff41b9baba8c35356a414b3da24edaea1bf68396efc7ffcbc5b8e902207b1b22c6201c2e4975cbbfc869632d4a2c89b46477b71ef6f875f1c844346d4d414104e1c33577152151109fe5e02c600f386fda865594c1b989ce0fcfbc0fb0b144a2c8fd98053fd86a4ccc7e0dcbcdd6a15c38eb32a27b3653c54f78ba00ffd71d19ffffffff0238300000000000001976a9141a586975175967c83e2b90422bcd8af9a623156288acfdc20d00000000001976a91470fb690a177e8721098d90284ab3c3304ee19cd588ac00000000
16: mandatory-script-verify-flag-failed (Signature must be zero for failed CHECK(MULTI)SIG operation) (code -26)

second (compressed pubkey):

sendrawtransaction 0100000001edc990f08c1ddd5102dfc7f4af32e7927a14fd8d0bc9996725f38ede549b91f8010000006b483045022100ed2a0f6644ff41b9baba8c35356a414b3da24edaea1bf68396efc7ffcbc5b8e902207b1b22c6201c2e4975cbbfc869632d4a2c89b46477b71ef6f875f1c844346d4d412103e1c33577152151109fe5e02c600f386fda865594c1b989ce0fcfbc0fb0b144a2ffffffff0238300000000000001976a9141a586975175967c83e2b90422bcd8af9a623156288acfdc20d00000000001976a91470fb690a177e8721098d90284ab3c3304ee19cd588ac00000000
16: mandatory-script-verify-flag-failed (Script failed an OP_EQUALVERIFY operation) (code -26)

input: https://blockdozer.com/insight/tx/f8919b54de8ef3256799c90b8dfd147a92e732aff4c7df0251dd1d8cf090c9ed

from address: 1BJPrnDajNczh8cQw2cHGgWyCcRXRDWNFU

checking pubkeys:

void checkpub ( )
{
  const MyByteArray classic    ( QByteArray::fromHex ( "04e1c33577152151109fe5e02c600f386fda865594c1b989ce0fcfbc0fb0b144a2c8fd98053fd86a4ccc7e0dcbcdd6a15c38eb32a27b3653c54f78ba00ffd71d19" ) );
  const MyByteArray compressed ( QByteArray::fromHex ( "03e1c33577152151109fe5e02c600f386fda865594c1b989ce0fcfbc0fb0b144a2" ) );
  qDebug ( ) << classic.hash160 ( ).toString ( );
  qDebug ( ) << compressed.hash160 ( ).toString ( );
}

the result:

"1BJPrnDajNczh8cQw2cHGgWyCcRXRDWNFU"
"1Fk7x75LYzySLi9e7wj9DBJkcAhe3kVcCa"

Conclusion: your first transaction with uncompressed public key is closer to be correct, but the signature is wrong. BitcoinCash has another algorithm for transaction digest calculation


Bitcoin transactions fee increasing For instance take a look at this transaction:

Transaction Size : 1700 bytes

Fee: 133 Sat/Byte

Total: 0.00226898 ~ $33

Outputs: 11

Inputs: 2

Transaction Link

what may cause confirming delay, and is sending with higher fee's helps us avoid issues like this? if so, Bitcoin transactions are so expensive , No?

You can check this site for average Bitcoin transaction fees
https://bitcoinfees.earn.com

133 Sat/Byte is below the average, therefore not favored by most miners.
In times like this where the network is congested with over 200000 uncomfirmed transactions, higher fees have higher probabilty of getting through first.

A block can hold at maximum 1MB / 192 bytes = about 5200 transactions, but in reality the average is less than half that number, and a block takes on average 10 minutes to solve.
Right now there are more incoming transactions per 10 minutes, than what the miners are capable of solving, hence low fees != prioritized .


How to remove a transaction from the memory pool Using Bitcoind and Json-RPC, how to remove an unconfirmed transaction from the memory pool?

The scenario being removing the unconfirmed transaction because it's not getting confirmed, and it's preventing me from sending new transactions spending the same inputs because Bitcoind considers it a double spend.

Try the removeprunedfunds RPC command. It

  deletes the specified transaction from the wallet. … This will effect wallet balances.


How to make transaction without wallet? I've some utxos with a address. I use CreateRawTransaction to make a transacton. But this method need a txid filed, I've searched a lot to get the txid from the address, but I didn't find any.

So is it possible to make transaction without wallet programmatically？

Note:I use the command line only, non-wallet distribution, I just want to create, sign and send transactions with command-cli or rpc.

You can create raw transaction, sign, ...etc programmatically but if you need to fetch address transactions (inputs) or broadcast the signed transaction to bitcoin network you'll need to connect to Bitcoin network.

Bitcoin-core is amazing for this purpose and if you don't want to download the whole blockchain you can alternatively use Electrum servers.

helpful commands for Bitcoin-core:

listunspent: returns an array of unspent transaction outputs belonging to this wallet.

ListTransactions: returns the most recent transactions that affect the wallet.

Electrum commands:

after connecting to some electrum server you should send JSON-RPC commands

listunspent example:

{ "id": 1, "method":"blockchain.address.listunspent", "params"["1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L"] }

UPDATE

if you are already using Bitcoin-core, so you only need to call listunspentto get your wallet UTXO's or provide an address to get that address UTXO's.

bitcoin-cli listunspent MIN_CONF MAX_CONF "["ADDRESS_NUMBER_ONE","ADDRESS_NUMBER_TWO"]"

If those address doesn't belong to your wallet, you should import them first.


What is the reason to pay miners "monetary rewards" for mining process? Is it correct to say that:

In Bitcoin, it is crucial to incentivize miners by monetary reward, because mining process has significant monetary cost (energy/electricity cost). ? otherwise, mining process is not affordable for miners ? is this sentence correct?

I mean if we assume that mining process to solve PoW was free (consider accessing to free electricity was possible for everybody in earth!), then could we have fee-free transactions in Bitcoin? and incentivize miners by a non-monetary rewards?

In other words, the reason of using monetary rewards is that consuming electricity has monetary cost for miners and so this monetary reward is compensation of miners electricity cost ?

Please note that my purpose to ask this question is not the reason of PoW as consensus mechanism, but also I mean the reason of using monetary rewards not reward. We can have other types of rewards, not necessarily monetary reward. But apparently in Bitcoin because of nature of PoW that has monetary cost for miners, we may have to use monetary rewards for miners.The matter of my question is not reward itself, but also the type of reward Bitcoin uses that is monetary reward.

I'd like also to mention following notes:

(1) non-monetary reward does not work for PoW, since mining process has monetary cost for miners and so non-monetary is not affordable for miners.

(2) the purpose of non-monetary reward is bringing fee-free transactions, since resource of monetary rewards is transactions fee.

(3) we can make non-monetary reward non for selling such that a point for faster confirmation only belongs to a specific public key exclusively and it is not Non-transferable to other public key.

To elaborate on my comment,

I think that any type of 'reward' will have a monetary value, whether that be indirect or not. Proposing to reward miners with something like 'faster transaction confirmation' (the example in your comment) would only add friction to their ability to reap financial reward. A savvy miner could expand their mining infrastructure, to gain a ton of quick confirmation credits. With that done, they could then sell faster confirmations to other users, and presumably profit in doing so.

I think that adding friction in this way is bad, it introduces external factors (the ability of a miner to network and sell their fast confirmation) that will affect the profitability of individual miners differently. Having an explicit monetary reward (ie the bitcoin block reward) keeps friction low: all miners that find a block will are equally capable of claiming its reward.

As I wrote above, If the reward is something to be sought after, then it will have value, even if indirectly.

There is no known way to create a secure cryptocurrency network without cost. POW requires energy expenditure, POS requires users to lock up their funds (opportunity costs), etc. Relying on users to pay these costs without reward makes for broken game theory, and a broken/insecure network.


Should USD savers be concerned about the rising popularity of cryptocurrencies? I recently took an interest in cryptocurrencies.  Mostly, I'm interested Ethereum and Smart Contracts, but all the news about Bitcoin's rising price has prompted me to study currencies and economics in general.

The next generations are embracing this technology and it's only accelerating.

Should people that have spent a lifetime saving USD be concerned about the impact alternative currencies will have on the future value of their savings?

Considering that the US dollar has lost 90% of its purchasing power over the last 100 years you should be worried regardless of cryptocurrencies.


Which branch of bitcoinj should I sync to? I am experimenting with Bitcoinj to design a stable node that is synced.
Older versions of bitcoinj seem to drop connections and stop syncing.

I currently see the following branches (see screenshots).

I would assume to use the "release" branch but the latest one is "Unverified"

On the other hand, I am also inclined to use one of the active branches.
The Segwit has not been updated for 11 months. I recall reading on the mailing list that the segwit code is still not complete.

Instead of having to dig into the code myself, I would like to get opinions on which branch to use and save some time.

https://github.com/bitcoinj/bitcoinj/issues/1336

  Just ran into this issue and spent a while debugging it (on latest release, 0.14.5). I added rpcserialversion=0 and that fixed the issue, so it's easy enough to work around. If bitcoinj isn't planning to add support for the new format, it might be nice for bitcoinj to realize it is parsing the new format, and throw a more relevant error message, something like "New rpc serial format not supported, see #1336".


How do you load the Android bitcoin backup key onto Bitcoin Qt? I have an Android wallet key and I want to load it onto my windows desktop. I am using Bitcoin-Qt, but i dont see an import option anywhere. How can this be done?

The backup file produced by the Android Bitcoin app is a text file containing lines of the form

5Jhvcnoi9LFxEcg68gTaDB3DiKEJ6TWJuMmyfjv89uEv3AbgdV 2013-01-01T12:34:56Z

The first field is the private key.  This can be imported into bitcoin-qt using the importprivkey command.  Choose "Help > Debug window", go to the "Console" tab, and enter:

importprivkey 5Jhvcnoi9LFxEcg68gTaDB3DiKEJ6TWJuMmyfjv89uEv3AbgdV

where you paste in the private key from the file.  bitcoin-qt will be unresponsive for several minutes while it searches the blockchain for existing transactions involving the new address; this is normal.


Blockchain is losing me money with every transfer I'm losing up to 45% on a BTC transaction. When it reaches the merchant they say that I'm losing it in the transfer and that the chain is the cause. How true is this and how can I check with the chain on what's going on?

Have you tried looking up your transaction on a blockchain explorer like https://www.blockchain.com/explorer ? How much did you pay in mining fees as a proportion of the entire transaction amount?


What Opcodes are used to store a file within Bitcoin? At a block-to-block level, what is actually encoded at a byte[] level to encode a file stream?

For details of the specific byte structure of a block, see resources like the Bitcoin Wiki article on blocks. For a transaction, see the article on transactions.

The actual data storage happens within the transactions, within their intput and/or output scripts. Theoretically, any script could be made including arbitrary data, but due to network standards, only certain types of scripts are allowed.

For an in-depth look at data storage techniques, see this paper. (Full disclosure: I am one of the authors.)

Note, when I talk about pushing data to the stack:

PUSHDATA(N) (where 0 <= N <= 75): Push the next N bytes onto the stack. The byte value for this is dec: N
PUSHDATA1: The next byte indicates the number of bytes after that to be pushed onto the stack. The byte value for this is dec: 76, hex: 0x4c
PUSHDATA2: The next two bytes indicate the number of bytes after that to be pushed onto the stack. The byte value for this is dec: 77, hex: 0x4d

Also, each chunk of data pushed with a PUSHDATA element cannot exceed 520 bytes, so bear in mind that any file will necessarily be broken up into chunks of 520 bytes or fewer.

Some ways of storing data include:

Using the coinbase (or generation) transaction (if you're a miner) to store a small amount of arbitrary data in each block you mine. This data takes the place of the inputs that would normally appear in a transaction. The coinbase transaction allows up to 100 bytes of data; however, some of this must be used for special uses, such as the block height and extra nonce.
In outputs with OP_RETURN. Each transaction may have one OP_RETURN output. Such an output may have a value of zero (since otherwise you're burning money that can never be recovered). The script looks like OP_RETURN <up to 80 bytes of data>. OP_RETURN is byte value dec: 106, hex: 0x6a, and the data must begin with a PUSHDATA element.
In outputs that pay to an address, etc. that recipient address/key/etc. may be replaced with arbitrary data. In that case, take the regular script and replace the address/key/etc. with your data. This creates an output which you cannot spend but which must be tracked in the UTXO set, so it is not advisable to do. An example of this would be to take the P2PKH script OP_DUP OP_HASH160 <Public Key Hash> OP_EQUALVERIFY OP_CHECKSIG and replace the 20-byte public key hash with 20 bytes of other data. (Note that the hash is pushed onto the stack with a PUSHDATA(20) element. As bytes, this looks like: 0x 76 a9 14 [your 20 bytes of data] 88 ac.) If you're replacing e.g., a public key, it may be detected that you're not using a real public key (if it doesn't start with 0x02, 0x03, or 0x04, for instance), but a hash should be indistinguishable from arbitrary data.
In inputs, using P2SH scripts. Then the data may be stored in the redeem script itself or in the inputs to the redeem script. There are multiple ways to do this, but generally the arbitrary data will be included in a PUSHDATA element, which the redeem script will somehow operate on. One notable method involves the redeem script including OP_HASH160 <hash of the data to be included> OP_EQUALVERIFY, and the inputs to that script including the data to be stored. This method ensures that the data must be included for the script to return true. Another method is pushing data to the stack, then using OP_DROP or OP_2DROP to remove it from the stack. This is efficient, but it would be possible for an attacker to tamper with the data in a transaction malleability attack.
You could also store data in e.g., the value field of your outputs, but this is highly inefficient.


How is the target in Bitcoin set? Who does this? I want to understand how the target value is adjusted or by whom in Bitcoin.

I know that the hash of a block + nonce must be lower or equal to the given target for mining.

Who sets this target ? If a miner puts transactions in a block, where can he see the target, where is it ? Is a target for any nodes the same. Is the target always the same in the whole network until someone finds the right hash ?

I read the white paper, I read several posts, but I stil don't get it.

The target is calculated by each node in the network independently.

Bitcoin is a decentralized system, so there is no authority that will set the target. The network is its own authority.

On this network, each participant (node) follows certain rules. These rules are the same for everyone, and govern how the network behaves. They include things such as the block size limit (block weight, in recent times), no double spends allowed (each output may only be spent once), difficulty adjustments to stay as close to a 10 minute block interval as possible (this is the target), and various other rules.

Every 2016 blocks (roughly 2 weeks), each node will look at the last 2016 blocks and calculate the average time spent mining a block. If this value is greater than ten minutes, the difficulty is reduced. If it is faster than ten minutes, the difficulty is increased. This readjustment allows the network to self regulate the mining target.

Since each node follows the same consensus rules, and all blocks are the same for all nodes, they will all arrive at the same difficulty value independently.

If a node were to miscalculate the target (or lie about it), and then produce a block based on their incorrect value, it may be rejected by the rest of the network for failing to meet the target requirements, and all the work invested into mining that block will be lost.


How is the bitcoin price affecting other crypto currencies I am still pretty new to the crypto world, and especially to the world of finance.
When thinking about buying some alt coins I realized that this is in most cases only possible via Bitcoin.

My questions:

Isn't the current price of Bitcoin and it's volatility directly influencing/affecting all alt coins that can only be bought via Bitcoin?

How are the prices of alt coins calculated to not show this dependency?

This is a very broad question I guess. Appreciate any help!

Agree that it's a broad question, but here is the specific answer to the parts you mentioned directly: yes, the price of bitcoin does directly affect the price of altcoins, and there is usually no calculation to avoid this, as the price of altcoins on exchanges are usually given as prices in bitcoin. Then to convert to USD, the current bitcoin/USD rate is used. Keep in mind that you can always use the bitcoin/altcoin exchange rate instead of the calculated USD/altcoin rate because that isnt affected by the bitcoin/USD rate directly (although it is, because the markets are related in other ways too, such as investor confidence in cryptocurrencies in general)


Antminer S1, how to mine on multiple pools I have an ant s1 and I want to mine on 3 pools. We can set them in the miner configuration but  the antminer use only the first one. I guess it will use the second then the third one in case of failover.

Is there a way to make the antS1 mining simultaneous on the different pools?

Thanks.

Not quite, however you can pool hop.
Check out Bit Hopper

this way you can maximize your mining profits, obviously you put other people at a disadvantage, but the pool operator should really take care of these exploits...


BTC wallet recovery: I have a 12 word backup, what do I do? I have the 12 key seed phrase from a 10 year old Bitcoin-qt acct, but don't know what tool to use to turn it into a wallet. Obviously I am terrified to put the seed phrase into any ONLINE tool. I want to practice offline somehow to see if I even wrote it down properly. I tried looking thru the sourcecode: https://github.com/bitcoin/bitcoin to see there is a word-list.. No joy.  One guy said Electrum, but it didn't help decipher the individual words, just kind of a 'put them all in', sink or swim endeavor....

Try this,
https://wallet.mycelium.com/
YOu may find more relevant information here as a second option.
https://wiki.trezor.io/Welcome


Why non-SegWit nodes do not reject SegWit block since there is no witness? SegWit is meant to be backward-compatible. When a SigWit block is relayed to a non-SegWit node, the witness part is stripped. If this is the case, wouldn't it be invalid since the non-SegWit node sees no witness/signature in transaction input?

So output is changed to anyone-can-spend output? If so, what prevents it to be spent by anyone not the intended recipient?

So output is changed to anyone-can-spend output? If so, what prevents it to be spent by anyone not the intended recipient?

No, it is not changed.

A SegWit output is anyone-can-spend from the view of old nodes. This means that to them, it can be legally spent without signature.

To new nodes, it has a different meaning, and requires a (valid) witness to be spent. Nodes that care about SegWit outputs enforce this rule, and will not accept a blockchain that spends without such a witness.


How the blockchain knows that its been tampered with? I know that the transactions stay in the block and hashed alongside few other things and that hash is stored in the next block. And I understand that if you try to tamper with one of the transactions, the hash will change and it will affect all the blocks that come after it.

However, how does a block know that its transactions have tampered with in the first place?

Assume that block #1000 has 10 transactions.
Now, the hash has been calculated and stored in block #1001

so, if I go back to block #1000 and add one more transaction, this will change the hash and it wont be the same one stored in #1001.
However, how the hash of block #1000 changes in the first place if it was already calculated? does this mean that the hash of each block is recalculated regularly?

Hashes don't actually 'change'. When you add a transaction to a block you are creating another block.

It's like an author published a book and then next year printed a new edition with an extra comma in the page 36 and the fans said he released a 'new' book. It doesn't make sense for books but for blockchain every bit counts.


Bitcoind server strategy. How much disk space? I need to host a Bitcoind on a VPS.

My main issue is the disk space strategy. I don't know the amount of MB the blockchain adds per day or per month.

On my disk I have 26GB of disk spent for the Bitcoin installation. There are some numbers about ho much the blockchain will add in disk space over time?

I'm also looking for VPS with a lot of disk space on the cheap. If you have some advise on this, I will appreciate.

Best Regards,

Hosting Bitcoind on a VPS is a very bad idea. I cannot stress this enough. The VPS provider will not have adequate security standards. You increase your risk profile dramatically as the combination of software running on the host server can cause a problem for you and your users. Please. Don't.

That said, if you do want to, it all depends on how transactions will be dealt with in the future. As a VPS is usually fairly flexible I'd take about twice the blockchain now, and just upgrade when you're above 80% disk space usage. That gives you some wiggle room.

You may consider using a light client, perhaps with increased connection count (more than 8). That will totally remove your disk space hunger and it's reasonably secure.


What are the pros and cons of different methods for transferring Bitcoins between different wallet services? I am interested in transferring Bitcoins between several different wallets: my Mt.Gox account, my Bitcoin client wallet, and my Blockchain wallet.  I am aware of two primary ways to transfer funds between any two of these:

Perform a transaction from one address linked to one wallet to an address associated with the other wallet service, or
Export private keys from one wallet and import them on the wallet I wish to effectively transfer to.

I was wondering what pros and cons there are to these two different methods and if there is an obvious "right way" to do it?  Any other methods, ideas or advice relating to transferring Bitcoins between these wallet services would also be appreciated.  My primary concern is maintaining security, however ease of use would I think obviously be a nice benefit.

This is a very interesting question. Of course there is no "right way" and as far as I know not even a best practice. I can't make up for myself either what I'd consider the best method, but I'll list up some considerations.

Not all clients allow exporting and/or importing private keys. I think this will be the biggest problem when you decide to go for the second method. There are even wallets that don't store individual private keys for every user, but just store all the coins from all their users somewhere together (probably for a big part in safe cold storage) and just send some when you want to make a transaction.
Transferring private keys involves some risk. Any sort of malware can be operating in your computer to monitor the appearance of private keys. F.e. malicious browser plugins scanning web pages for private keys, spyware monitoring your clipboard and looking for wallet.dat files or network spoofers monitoring private keys included in unencrypted network traffic.
Sending the coins over can cost you a transaction fee. This is normally no significant amount, but when sending much small amounts this can weigh. Of course you have to keep in mind that when you export-import the private keys, you will eventually pay the fee as well when you want to spend the coins.
When you want to transfer the coins to the wallet that will become your mail wallet, you may already have used its address on several places on the internet. When importing the private keys for other addresses will not make the coins available on your main address, but on the imported one. Most clients have no problem with sending/receiving from multiple addresses, but f.e. when you send coins with that other address to a contact that saved your main address in their contact list, they will not know that the payment comes from you.
The inverse argument of the previous one counts as well. If the address you want to move to another wallet is considered your main address (the one you shared with contacts), you will probably very much like to keep this address in your new wallet and importing it in your new wallet will be the very best option.
Just sending the money over is of course far easier than the hassle involved with transferring private keys. Some wallets f.e. don't allow you to import raw private keys but require them to be in some specific form like a wallet.dat file or some home-brew JSON format.

I hope some of my considerations help you to decide what to do with your two wallets.


Bitcoind information about the input and output Im trying to get the wallets/accounts the money got sent to. But getrawtransaction does not give any information about the reciever or sender


how to sign a multiple output transaction currently i m using below code,how to add multiple address to address.

let transaction = new bitcore.Transaction()
            transaction
                .from(txoSet)
                .to( userAddress, amountTotransfer)
                .fee(10000)
                .change(changeAddress)
                .sign(BTCkey)
            var sendTx = script.broadcastTransaction(transaction.serialize())
            sendTx.then(async function (tx) {
                console.log('tx', tx);
                })

Just call to multiple times:

            .from(txoSet)
            .to( userAddress, amountTotransfer)
            .to( userAddress2, amountTotransfer2)
            .fee(10000)


If transaction has impossible locking script, are coins lost? If a bitcoin transaction's outputs have a locking script that is basically unsolvable, are the bitcoins lost, or can the transaction be invalidated?  (Or something else?)

If it made it into the blockchain, meaning 1 confirmation or more, it practically can't be invalidated. The same feature prevents people from reversing payments.

If it's provably unsolvable, then there's no way to spend the coins, and they're practically destroyed.


What would happen to the Bitcoin network if all ISP's collectively block port 8333 at once? Will nodes still be able to find each other using today's official Bitcoin client?

The core developers could decide on a new port then get the word out that everyone should start using that port.  It's a very easy change in the bitcoin.conf file.  Mining pools, online wallets like blockchain.info and Coinbase, and "light" wallet providers like Electrum could lead the way.  (For example, once blockchain.info made the port change on their server, all their users would automatically have service again).  I think it would recover quite quickly.

The new port could also be shut down but it would turn into a game of "whack-a-mole".  The developers would probably come out with a new release that used some kind of strategy to dynamically search for a port to use to solve the whack-a-mole problem.

Alternatively, there is no reason they could not just switch to using port 80 for bitcoin.  The main disadvantage is it would make it a bit more complicated to run a web server and bitcoin node on the same machine.


How often does a typical miner refresh their candidate block? I realize that this is a general question with no "correct" answer, as every miner can operate differently.

Having said that, I'd like to be able to display a list of transactions that would be considered a fair representation of the transactions in the memory pool that are poised to be mined.

So far I have been:

Using getblocktemplate to get the list of transactions.
Refreshing the list when a new block arrives, or at 1 minute intervals.

Using getblocktemplate seems logical, as I imagine the majority of miners would like to get the most amount possible in fees from their blocks.

I'm then guessing that miners would want to refresh their candidate block at certain intervals to check for higher-fee transactions in the mempool.

Is it likely that miners would be inclined to refresh their candidate blocks much more (or less) than every minute?

There's several factors at play, one of them is that the underlying implementation of the Stratum protocol on many miners. Due to the way they are implemented many miners will drop a connection with their pool if they have not seen any updates in 30 seconds, as a result most pools will push work updates at this frequency.

Optimally, mining pools would update their work based on the block reward rather than a fixed timer. If the fee amount in their template has not moved it is not optimal for them to push new work, but if it has increased by a substantial monetary value it is optimal for them to push new work regardless of how recent the last update was.

Historically restarting work took a long time, but modern ASICs tend to take hundreds of milliseconds to alter the work they are performing, whereas older miners like HashFast could take tens of seconds.


Is there any protection against receiver's address masquerading attack? How does one verify that the address of, say “Foodmart”, which the sales person is telling me to send the payment to is actually the address of “Foodmart” not that of that salesman himself? To be specific, how does the blockchain prevent address masquerading attacks?

Bitcoin provides no protection against such attacks.  It is up to each user to verify that an address belongs to the person they really want to send money to.


How do I put bitcoins in my "Wallet"? I want to Buy something using bitcoins but I am not sure how to put bitcoins in my "Wallet".

Could somebody please help me?

When new Bitcoins are issued (7,200 per day, on average) they go to those who are mining for bitcoins.  At one point in time, mining to acquire bitcoins was something that was relatively easy to do.  That is no longer the case.  So now to acquire bitcoins one would normally buy bitcoins at an exchange.

What options are available to you will differ based on where you are, what payment methods you have available, how quickly you need the bitcoins and how many you intend to buy.

For instance, in the U.S., the fastest method to buy bitcoins is to use the service BitInstant where you deposit cash at a bank and they send the funds to an exchange.   The cheapest method is to do a bank transfer using Dwolla as intermediary -- however that is not very fast.  Other methods are shown here:

http://en.bitcoin.it/wiki/Buying_bitcoins

Then once you have purchased the bitcoins at the exchange, you would simply withdraw them and send them to a bitcoin address from your own wallet.  Using the Bitcoin.org client you would click the Receive bitcoins button and generate a new address.  That is the address you would copy and then from the exchange paste that address when asked from their withdrawal page.


How are transaction fees distributed? I'm trying to figure out how the transaction fees are distributed to the miners.
We pay an incredibly high amount of money to send bitcoins, but where does all the money go? Are they shared out equally among all the miners? My first thought was that the node that confirm the transactions is going to get the fees, but it's all a blur.
Thanks a lot!

Each ~10 minutes, a "block" containing transaction gets crafted and broadcast. Miners choose which transactions to include in their block -highest fee/Kb transactions, to maximize their earnings- and they collect the transaction fees of the transactions they've chosen when they find and publish a block.

Consider this transaction:

You can see the:

Included in Blocks: 499089

If you browse to that block in the block explorer...

So, the transaction fees of that transaction are collected by the mining pool ViaBTC.


Real-time price data for cryptocurrencies I need some source (preferably free) for real-time (or some reasonable time lag) for quotes of cryptocurrencies. Can you suggest anything?

What does Kraken or Poloniex use?

the price on an exchange will be determined by the user. the user (=trader) decide for how much {money, other coins, whatever} they buy or sell a coin/token.

if you want to have the prices of many exchanges/many coins/many token you can use the coinmarketcap api for example. coinmarketcap calculates the average price of several well known exchanges. but in practice every exchange has an api which provides the data of the current orders/price. see for example api-docs: gdax, poloniex, binance, bitfinex, bittrex, kraken.


Are there algorithms that could be used for mining that resist acceleration with ASICs? In my related question about mining algorithms that balance CPU and GPU it came up that such an algorithm would tremendously increase the incentive for people to create mining botnets. The prospect of a 51% attack by a botnet is not a good one.

However, the algorithms typically used by Bitcoin and related currencies still have the problem that ASIC mining may be so efficient that someone who develops an ASIC and keeps it strictly to themselves could outmine everyone else. This could easily mean a 51% attack by a well-funded adversary.

One possible solution would be a mining algorithm that was inefficient on CPUs but could not be made significantly (orders of magnitude) more efficient with an ASIC. Perhaps an algorithm that requires a moderate amount of memory that would be practical for a GPU to have but not very practical to locate on an ASIC. Perhaps an algorithm that would consume a very large number of gates on an ASIC.

Does anyone know any algorithms that meet the requirements for mining (easily verified on CPU hardware) that don't encourage botnets by working very efficiently on CPUs and don't encourage well-funded adversaries to launch 51% attacks by working very efficiently on ASICs. An algorithm that worked well on common GPUs but couldn't easily be accelerated massively by ASICs would do, I think. Am I missing something?

You are missing botnets of GPUs.

Honestly, I do not think botnets are such a big problem. Botnets succeed because they are invisible to the victims (some trojans even include an anti-virus to clean the system). If an infected computer has 100% CPU usage, it will not stay infected for long. Stealing credit card data is still a lot more profitable than running a crippled mining botnet.

So I would say that the scrypt key derivation function, from nealmcb's answer at your other question, is be a pretty good choice.


Is there a guaranteed hash for every block? Possible Duplicate:
  Nonce size - Will it always be big enough?

My question may be misphrased, if so, I'll correct it if you let me know in the comments.

My understanding of mining is that the header is appended with some nonce and that is SHA256'd to get some hash, let's say: 7050a40746c695a220acb99c725ef66b29aa863707b17ba939c8bb1f5ec52b67

This happens until there are X number of consecutive 0's in that hash. Is there a guarantee that there will always be at least X 0's in a row for every block header?

There's no guarantee that you can solve a block just by adjusting the nonce.  But there are other things you can change in a block that also change the hash.

This question is pretty much an exact duplicate of your question.


Where can one download the legit copy of bitcoin core software with hashes to verify? Where can one download the office bitcoin core software? The bitcoin software that everyone is using. Just typing in "download bitcoin" in google, its quite confusing for newbies as you have bitcoin.org and then bitcoincore.org - which one is the reliable copy? Is there another place I should get it from? And who even controls bitcoincore.org?

Those are both legitimate sources. You can be confident in your download by verifying the checksum and the PGP signatures provided on the respective sites. The process is outlined in more detail on their download pages.

I think the method with the highest level of confidence would be to clone the official repository: https://github.com/bitcoin/bitcoin and build it from source.

I don't know who controls bitcoincore.org, I'd assume the maintainers of the Bitcoin Core developer community. They are linked in the GitHub repository, so thats a reassuring signal to me.


Altering Consensus Rules How nodes agree to consensus rules? Is it possible for someone to change the consensus rules for his own software and then remain in the previous network? If not, then why?

If you alter the consensus rules in the software running your node, there are two options:

You apply rules less restrict than before, accepting some transactions that were previously invalid: every block you mine will be displaced by blocks from longer chains mined by the miners that didn't change anything and have more hashpower than you. Because they'll never accept your blocks but you're still accepting theirs.
You apply rules more restrict than before, rejecting some transactions that were previously valid: you are on your own, and will have to mine every single block. Depending on your current hashpower, it could take weeks until the next one. Unless you also change the rules concerning minimum difficulty. But the blocks you mine still will be accepted only by your node.


How to setup seed node? I have compiled and build my own coin using cryptonote fork.
After that i have printed genesis block.
Then I pasted this genesis block hash and rebuild the binaries.
But, my question is:-

What to do next?

I have all this on my local pc.

How to start seed node?

I have purchased digitalocean VPS.

What files do i need to transfer to VPS.and what commands do i need to run on vps.

Please help me

I have been in the same boat since last 2 weeks. Made a BTC clone out of a very old source code found online.

I have been a bit successful as well.

All the below assumes that you are running Ubuntu.

After compiling I was able to run it using the ./xyzcoind

I did find out that you would need at least two nodes to test. I read this somewhere and also validated this. Can not start mining till there are two servers talking to each other.

I have done this by setting up two small servers on Azure. One connects to the other.

./xyzcoind -connect=a.b.c.d

To test if it is running well or not you may goto .xyzcoin in your home folder and check debug.log

To set up the dns seed node, the parameter can be directly specified in chainparam.cpp if you are using bitcoin source in line that reads as "

  vSeeds.push_back(CDNSSeedData("someaddress.com or IP addy",
  "someaddress.com"));

And then you need to add all the seed node IP address to the A records where ever you have your domain name from. You might need to do it on your own if you have a privater server or can use cpanel depending on the scenario at your end. I did it via cpanel as I have domains hosted with siteground.

some more details on below link

  What is a DNS seed node vs a Seed Node?


Is bitcoin-gold more ASIC-resistant than Litecoin? Bitcoin Gold's main point for existence has claimed to be ASIC-resistant in order to have mining power more distributed.

But wasn't this tried already with Litecoin via Scrypt mining algorithm? I've heard there are already Scrypt-capable ASICs, so is Bitcoin Gold now a better alternative?

What's Bitcoin Gold algorithm? Can it become minable by ASICs at some point too? Could Litecoin switch to this algorithm to be ASIC resistant again?

This appears to be old but to correct the above answer, Bitcoin Gold used to use the Equihash algorithm but recently forked to the Equihash-BTG proof of work algorithm in order to keep in line with the protocol's main objective, ASIC resistance.

As for which protocol is better? I suppose for some that is a matter of opinion but if you ask me (and the majority of the ecosystem as evidenced by the price), LTC has it all over BTG in terms of developer interest, liquidity/volume, price, propagation, potential use cases, etc.

The GPU-mining ship sailed long ago for LTC.


cpuminer: Running two nodes -The requested URL returned error: 500 Internal Server Error, json_rpc_call failed, retry after 30 seconds I'm trying to mine new blocks using cpuminer. My blockchain network runs on localhost on the testnet network with two nodes. When I'm trying to mine the blocks I'm receiving the following error:
* TCP_NODELAY set
[2020-08-19 10:46:01] Binding thread 6 to cpu 6
[2020-08-19 10:46:01] Binding thread 4 to cpu 4
* Connected to 127.0.0.1 (127.0.0.1) port 18001 (#0)
* Server auth using Basic with user 'liork'
[2020-08-19 10:46:01] Binding thread 2 to cpu 2
> POST / HTTP/1.1
Host: 127.0.0.1:18001
Authorization: Basic bGlvcms6aXJvY2s=
Accept-Encoding: deflate, gzip, br
Content-Type: application/json
User-Agent: cpuminer/2.5.1
X-Mining-Extensions: midstate
Content-Length: 147

* upload completely sent off: 147 out of 147 bytes
[2020-08-19 10:46:01] Binding thread 0 to cpu 0
* Mark bundle as not supporting multiuse
* The requested URL returned error: 500 Internal Server Error
* Closing connection 0
[2020-08-19 10:46:01] HTTP request failed: The requested URL returned error: 500 Internal Server Error
[2020-08-19 10:46:01] json_rpc_call failed, retry after 30 seconds

My nodes configuration:
Node1:
...
# Options only for testnet
[test]
connect=127.0.0.1:17002
rpcport=18001
listen=1
port=17001
rpcuser=myuser
rpcpassword=mypassword
...

Node2:
...
# Options only for testnet
[test]
connect=127.0.0.1:17001
rpcport=18002
listen=1
port=17002
rpcuser=myuser
rpcpassword=mypassword
...

I'm running the cpuminer using the command: ./minerd --url=http://127.0.0.1:18001 --user=myuser --pass=mypassword --coinbase-addr=my_address --protocol-dump

Because new blocks are not generated few days, I got this error.
To solve this I generate a new block using the bitcoin cli:
./bitcoin-cli --datadir=<dir_to_wallet> generatetoaddress 1 <wallet_address>


I can pay invoices on my mainnet LND node, but others cannot pay my invoices I have an LND node running the 0.5.2-beta release on a 2 core, 8GB ram Ubuntu 16.04 VM. This is my node: https://1ml.com/node/02d5efae50c1cdc6011e40b74f061ea4f444088865ec14a59e4ee6cf0d71c842fc

I used the Raspibolt tutorial to setup this node. It appears to be working properly, however when trying to receive payments it doesn't work. I can make channels and stuff, the only issue is being unable to receive payments.

For example, I have a post on yalls. I have paid for posts, it works perfectly. However when I try to withdraw whatever I have earned through yalls, it says payout failed. When I try again it says invoice is for too much, although that is false. I can confirm I have entered the right node public key when creating the post as I tried my invoices on other yalls posts and it clearly says the node pubkey is different. Here is an imgur album demonstrating this.

I have also tested my invoices with BlueWallet, and it says LND api failure 7. Here is an imgur album showing this. I think the problem here is my node. Has anyone encountered this problem, or know of a solution to it?

TLDR: I can do everything with my LND Node, except receiving payments on invoices I make

I did not have any incoming connections with enough liquidity. I got some and it is working now.


How to export bitcoinj wallet I am working on an app which uses bitcoinj. I want to implement export/import functionality to a standard format which can be shared with as many as possible wallet apps.
Is there a standard format used by wallet apps?

Well exporting the raw keys is as standard as you'll get. Different wallet implement their own file format for storing information such as addresses, and keys. But most wallet have at least an "import private key" functionality so that would work.


Wallet versus client machine Can I store my wallet on one machine while running the client on another?
I'd like to help the p2p aspect of the network by leaving a dedicated machine connected...

Here's how I understand your question: You have a spare computer that you'd like to run bitcoin on to help the network. You have a second computer that is your main personal computer; it's also where you'd like to keep your bitcoins. Two copies of the blockchain would waste bandwidth and disk space.

There is a way to keep the blockchain on one computer but to keep your coins on another - you can run the electrum client, and the normal bitcoin client on the other computer. Optionally, you can run the electrum server on your always-up computer, although this requires some command-line knowledge.

https://github.com/spesmilo/electrum-server/blob/master/HOWTO.md


Why are transaction fees sometimes higher than what I'm transferring? Transferring from my wallet to another baffles me prior to the transaction charges. Please someone help. The charges are sometimes higher than what I am sending.

Transaction fees are not in relation to the amount of value transferred, but in relation to the amount of block space they'll take. Therefore, it is relatively cheap to send large amounts of value in Bitcoin but uneconomical to send micro-payments.


Should I keep my RPC credentials private? I am wondering if there are any security issues with other's knowing my RPC credentials. I'm not familiar with RPC and how it works or anything.

Reason I'm asking... I make youtube videos. Right now I'm editing one where I am using the Lightning Network. Everything in the video is on the testnet. So I'm not at risk of any real damage being done to me. Most I'll lose is the progress I made setting up the testnet and lightning network on this machine. However, if my RPC credentials don't matter, it would save me a lot of time having to blur them out in my video.

Thank you.

Yes, you should keep your RPC credentials private. RPC credentials give someone control over your node. They will be able to issue all of the commands that you can issue, including sending coins, shutting down the node, disconnecting and connecting peers, etc. The most important part is that if your wallet is not encrypted OR if you have unlocked the wallet, having the RPC credentials allows someone to move your Bitcoin.

The RPC interface can also be used to overwrite files in your filesystem. The backupwallet command will overwrite files with the backup. An attacker could use this to effectively delete files on your machine by overwriting them with copies of your wallet.

However, the RPC interface is typically not exposed to the internet, so even if someone does have your RPC credentials they probably cannot connect to your node to issue commands. Even so, you should keep your credentials private, or as Nate Eldredge suggests, change them before you post the video.


Where is the QR code listed in Electrum 3.0.3 Quick question...Where can I get the QR code for Electrum 3.0.3
where is it stored? I looked at the different tabs but NO luck

Someone is trying to send me some coins and asked me for the QR code.

Where can I see this code? and are they maybe referring to the address of the wallet?

Clarity needed here, Help out please!

Thanks,

I assume you are talking about the QR code for an address in your wallet. If you go to the receive tab, you will see a receiving address filled in the Received address text box. Next to that, there's a QR code. That QR code is for your address.


What purpose does XRP serve in the ripple protocol? I have been reading over this document that Ripple Labs put out. The document says that:

  XRP is there to provide two key functions: to prevent abuse of the system and to act as a bridge currency for market makers providing liquidity within the network. Thus, users can hold balances in one currency and transact in another currency without converting to XRPs in the process.

And later

  In theory, users of the Ripple Network could exchange anything of value.

Bitcoin already has spam prevention, and a much larger trading volume than Ripple, though. It's not clear to me why everything that Ripple Labs is doing couldn't have just been done with BTC.

I really like what most of what Ripple is doing (trying to integrate with the existing financial system, for example), it's just hard to trust it knowing that the developers own so much XRP, combined with believing that it could have just been done with BTC. So, essentially, I'm looking to be convinced that the creation of their own token was, in fact, necessary.

Is it just to fund Ripple Labs? I don't mean that in a negative way, I actually think that funding the development of decentralized applications is a difficult problem. Decentralization inherently allows users to participate in the system without consent from an authority, and without needing to pay any single entity. But then what incentive does that developing entity have to create the system? I think this is why so many decentralized projects are opensourced projects, rather than proprietary solutions. And the ones that are proprietary solutions (like Ripple), usually create their own token.

It's not clear how you're imagining doing what Ripple does with Bitcoins, so it's hard to say whether you're correct or not.

If you mean with the Bitcoins still being transferred on the blockchain and being used directly to pay transaction fees for Ripple transactions, that wouldn't work. Bitcoin transactions take time to confirm, and slowing Ripple down to Bitcoin's speed wouldn't make sense.

If you mean with the Bitcoins being virtualized somehow onto Ripple's ledger, it's hard to see how you can do that reliably without a central authority. Also, what do you do with the Bitcoins that pay transaction fees? Destroy them?

You haven't really set out your proposed alternative in much detail. It's possible that you do have some good way to do it. But I don't know of one.

One of the main points of Ripple is to solve the double spend problem without relying on proof of work and without being vulnerable to 51% attacks that have no clear solution. Building on top of Bitcoin would make a system that was at best no stronger.

There are significant benefits to having a native currency on the same ledger.


What do we mean by honest nodes? In his recent paper, Vitalik often mentions the term "honest nodes". What do we mean by that exactly?

An honest node is a node that does not try to modify history. This is opposed to an attacker node which tries to modify a past block in the blockchain presumably to benefit them financially.

Note that because transactions are cryptographically signed, "An attacker can only try to change one of his own transactions to take back money he recently spent," Bitcoin Whitepaper.


Can someone please explain FIBRE to me like I'm 5 and why is it useful? I read the website but they imply you already know why this is valuable. Can someone please illuminate me on this issue?

First the "why it matters":

Fibre (Fast Internet Bitcoin Relay Engine) is a protocol which attempts to deliver Bitcoin blocks around the world with delays as close to the physical limits as possible.

This is very important because Bitcoin mining is intended to be a fair lottery: If you have x% of the hashrate you should find x% of the blocks, on average.  But when it takes time to communicate blocks mining acts more like a race than a lottery: the bigger miner gets an unjust share, creating a pressure to centralize.

This is because when a miner makes a block other miners can't work on extending it until they've heard of it, during that time they might make their own blocks.  If you are a small miner and make a block this works against you because no one attempts to mine the successor to your block until later. If a larger miner mines a block it also works against you, because you've fallen behind.

This race behavior is the same that enables selfish mining.

The race effect can also benefit attackers trying to overpower the network, because they don't need to compete with hashrate lost to stale blocks.

Improving propagation speeds reduces the race and makes mining more fair, lowers pressure to centralize, and improves network security.

Now, "why is it hard":

The world is a big place and a round trip from San Francisco to Australia is well over 200ms typically. These delays are substantially due to speed of light in fiber and while better routing can improve them somewhat, they aren't going away without through-earth-neutrino communications or other stuff from science fiction.

International internet links frequently have packet loss.  If you send a message on a 200ms RTT path you can't hear about any missed packets for 200ms, and they can't get any replacements for another 100ms.  Traditional transmission protocols like TCP do a poor job of achieving link capacity when delays are high especially if there is any loss.

In theory the problem is aided somewhat because 99.9% of the block data is already known because the block mostly contains transactions that have already been broadcast, but unfortunately a node sending a block doesn't know which transactions you'll be missing by the time their block shows up and you telling them will take too long just due to the above mentioned round trip times.

What Fibre does do to solve it:

Fiber lets you effectively build a distributed node that internally moves a block around the world very close to the lowest one way communications delay between the computers comprising it.

The author of fibre runs one such node on public systems which are well maintained and anyone can connect to.  The normal Bitcoin P2P protocol, with BIP152, is used for the last mile-- since that is what BIP152 is optimized for.

Similar to BIP152 (which it was co-developed with) Fiber first sends a short block sketch: A list of short hashes and lengths that allow the far end to use its mempool to lay out transactions into a block, with holes in positions where the transactions were missing or the hash was ambiguous.

Then Fibre breaks the blocks into packets and sends error correction data.  The error correction lets the receiver recover the block as soon as it has received as many packets as missing chunks, even though the sender doesn't know whats missing. Error correcting coding is also used on the initial sketch. This is similar to how Raid or PAR encoding works, but the implementation is made much more complicated by needing to be very fast.

All of this communication happens over UDP with pre-programmed transmission rates, so it doesn't need to ramp up slowly or wait for lost packets.

The sender also sends different chunks to each of its Fibre peers and those peers themselves relay the chunks among each other as soon as they get them, in order to make use of all the interface bandwidth available. When a Fibre peer gets enough to decode the block they do, and start emitting novel chunks.

This process avoids any duplicated data being sent and is highly robust to packet loss as well as link and node failures and achieves very consistent delay.

At every step Fibre trades off bandwidth for latency and can send several times the size of the block data in order to achieve the lowest delay across the long-haul links that it rides over.

There is a lot more to the details of it, probably enough for two dozen questions.

Where did Fibre come from?

Fibre was built by Matt Corallo and was the product of several years of experience running earlier fast relay networks as several years of research into fast block propagation techniques.  Matt took many ideas that were far too computationally slow to be practical, solved the remaining engineering challenges, optimized the heck out of it and then put the result up on a well curated public system.  Good network management and sysadmin work are almost as important to getting low delays as the protocol itself.


Are mining pools evenly distributed across the planet? Are mining pool managers evenly distributed across the planet? where are the biggest ones located? Like where are the servers physically located? Recently the backbone ISP for all of the Universities in Michigan went down and everyone on each campus was offline1. Could something larger of this nature potentially take out some pool managers and therefore some pools, thereby increasing the hash share of the online pools and risking a 51% attack?

Evenly distributed, no.

There are pools on nearly every continent.

But a pool only has the hashing power of the individual miners participating.  Miners can (and do) jump from one pool to another when connectivity issues occur, or when workload isn't received, or when payouts stop.

Individual miners are much more spread out. Areas with cheaper electricity got higher participation than areas with lower electricity, but now with ASICs that will probably not be as much of a factor for a couple years again.


How do you calculate the transaction fee when sending to multiple addresses? I am sending 50mBTC to 10 Wallet Addresses in a single transaction. What transaction fee should I add to the entire transaction? 0.1mBTC?

Following on from that, what is the maximum number of addresses I can add to that single transaction that keeps below the 10kB threshold?

I use the following formula:

148*I + 34*O + 10

where I is the number of inputs and O is the number of outputs.  The actual size will vary by I bytes since an extra byte is prefixed to an address that starts with 0x80.

The transaction fee is for each kB (1000 bytes) of the transaction, so you should be safe by using 0.0001 BTC per kB as the fee.  Note that the transaction size is rounded up to the next kB.  So a 1001-byte transaction will be charged two transaction fees.

More information here:
Protocol specification
Transactions


Bitcore = "Error: More than one instance of bitcore-lib found" These two lines (and nothing more), create an error:

var exp = require('bitcore-explorers');
var btc = require('bitcore-lib');

Error: More than one instance of bitcore-lib found. Please make sure to require bitcore-lib and check that submodules do not also include their own bitcore-lib dependency.

I could see that this issue has been documented here, as well as here, and here. I read these pages, but I am still unable to overcome the issue.

Can someone please help? How do you do when trying to import different modules of bitcore?

I don't know if that's the right method but it does work.

delete global._bitcore
var bitcore = require('bitcore-lib')


Coinbase outgoing transaction never changed destination account balance? The transaction can be tracked at https://blockchain.info/tx/47068b561814a19a9613946185d527c7ba6eb3b6ed0cf17554fc80c27d7f0d4e?show_adv=false.

Although the transaction has been already been confirmed many times the balance of the destination account 1AQ27x3NQDpj5AGjGAKkvrcJW4RWvmhstX still shows 0.

The Coinbase source account https://blockchain.info/address/127SXekKqYsY6EbASqkvSZ4ZfF31qGKG93 shows "No transactions found for this address, it has probably not been used on the network yet."

Is that phantom transaction?

Blockchain.info must have missed a block or had some other complication with their database.

http://blockr.io/address/info/127SXekKqYsY6EbASqkvSZ4ZfF31qGKG93


Incorporating Bitcoin into a app for person to person payments Is it possible to incorporate Bitcoin into a app my company is developing in order to process person to person payments?

You can build your own inner ecosystem based on bitcoin's block chain where every transacion is in bitcoins. Then you can make a gateway for outer payments using one of the existing commercial payment processors (InPay, BitPay, BitInstant etc).

Moreover you can create your own cryptocurrency using bitcoin's open-source code.
But then you have to take care of minig process by yourself and create many additional tools (wallet, minig software, blockchain API). You can also have problems to exchange your own cryptocurrency with bitcoins or dollars. So if you need connection with the outer ecosystem it will be better to use bitcoins then create your own software.


How is "engine lag" on Mt Gox calculated? When looking at external API-driven charts of Mt Gox trades, there is a "Trading engine lag" shown, which shows the backlog of orders queued and waiting-to-be-executed, relative to the present time:

(For example, see http://bitcoinity.org/markets, and http://bitcoin.clarkmoody.com/ )

How is the "engine lag" time calculated?

It is the difference between current timestamp and the submission timestamp of the oldest order submitted, which has not yet been processed by the order book.