Is Segwit really safe and reduced? In the Segwit rules, transactions propagated to legacy node doesn't have any signature. so it will be valid as well as in terms of fresh node(supporting Segwit).

First question:

  In this point, if Bob make a fraud transaction with Segwit, legacy
  node will accept, but it is not accepted in terms of fresh node. so,
  some group(legacy nodes) accept, other some groups(fresh nodes)
  doesn't accept. it means that proportion of fresh node should be
  bigger than proportion of legacy node. I think that this is really
  critical issue but current Bitcoin works well. we can say proportion
  of fresh node is bigger than legacy groups, but how it was achieved?
   when Segwit is appeared, at this time proportion of fresh node is
  maybe too small to overtake legacy groups.

Last question:

  Block size is physically 1MB. Regardless of the calculation rule is
  'Weight' or 'Bytes', the transaction size is always same physically.
  Why some guys says that Segwit transaction is compact than traditional
  transaction?
  Signatures are not removed, it is just moved to end of the transaction. Consquently, the data size are same between Segwith and traditional protocol. Please catch where I am wrong.

Sorry for my English.

In this point, if Bob make a fraud transaction with Segwit, legacy
  node will accept, but it is not accepted in terms of fresh node. so,
  some group(legacy nodes) accept, other some groups(fresh nodes)
  doesn't accept. it means that proportion of fresh node should be
  bigger than proportion of legacy node. I think that this is really
  critical issue but current Bitcoin works well. we can say proportion
  of fresh node is bigger than legacy groups, but how it was achieved?
   when Segwit is appeared, at this time proportion of fresh node is
  maybe too small to overtake legacy groups.

Segwit did not just show up out of nowhere with no warning and no software to enforce it. Segwit capable software was released long before its activation, thus allowing for sufficient time for nodes to upgrade.

As with all previous soft forks, the activation time was determined well in advance (kind of). It wasn't scheduled (one soft fork  did have a scheduled activation), but rather required that miners signal readiness to enforce Segwit's rules before they would actually activate and be enforced by nodes on the network. This signalling was done by setting a particular bit in the block version number. 1916 out of a period of 2016 blocks must have the bit set in order for the rules to be activated.

Furthermore, even after the signalling threshold was reached, there would still be another 2016 block grace period where Segwit is "locked in" but not yet active. This is just a grace period for people who haven't upgraded yet to upgrade now that they know that the Segwit rules are going to activate. After the grace period, the rules will activate.

With even the fastest activation (everyone started signalling as soon as possible and the threshold is reached in  the first signalling period), there are ~4 weeks from time of "release" to activation  for people to upgrade. It is likely that there wouldn't be a majority, but at the very least, miners would have upgraded and enforced the rules (in the ideal case, but reality does say otherwise). And once the fork becomes "locked in", it can be expected that many more people will upgrade as they do see the importance of enforcing all rules in effect.

In addition to the time it would take for signalling and lock in, there is also the signalling start time. Miners could only begin signalling for segwit activation after a predetermined time. Any signalling before that time would be ignored. This start time was set to be a few weeks after the release of the first mainnet segwit capable software. Specifically, Bitcoin Core 0.13.1 was released on Oct. 27, 2016. The start time was defined to be Midnight Nov. 15, 2016 UTC. So there was almost 3 weeks between the release of the software and the beginning of the first signalling period. In total, ~7 weeks between the  release of the software and the first possible activation time. This is sufficient time  for many nodes to upgrade, and ideally, enough to protect the network.

Lastly, it is not expected for any soft fork to be deployed at the first possible activation period. They are expected to take a few months as miners are typically slow to upgrade (usually auditing software, upgrading their custom software, etc.). So in practice, by the time a soft fork does activate, many, if not most, nodes have upgraded.

This whole deployment mechanism can be (and is) used for many soft forks. It is described by BIP 9.

And then let's look at what actually happened with Segwit's activation. Segwit took 11 months from the release of 0.13.1 to be fully deployed. By that time, the vast majority of the network had upgraded to segwit capable software.

  Block size is physically 1MB. Regardless of the calculation rule is 'Weight' or 'Bytes', the transaction size is always same physically. Why some guys says that Segwit transaction is compact than traditional transaction? Signatures are not removed, it is just moved to end of the transaction. Consquently, the data size are same between Segwith and traditional protocol. Please catch where I am wrong.

Blocks are physically larger than 1 MB. The "block size limit" has been removed and replaced with the weight limit. It is true that physically, Segwit transactions are about the same size as non-segwit ones.

The "more compact" stems from a confusion between physical data size, and data size used for computation of the previous block size limit. Under the block size limit byte computation, segwit transactions are more compact. But when computing the actual number of bytes transmitted over the network, they are about the same.


Is it cryptographically possible to have aggregate signature schemes that can improve privacy in UTXO consolidation? My understanding of Schnorr signatures, Taproot and Graftroot and how they improve privacy in smart contracts / multi-sig is by allowing users to aggregate signatures so the individual signatures and keys are not visible but summed in the aggregate key / sig.

Are there any cryptographic protocols that allow the summing of UTXO inputs? So for example multiple inputs in a transaction were summed to one aggregate input and then signed with the sum of the input private keys?

Is it possible to improve privacy of UTXO consolidation?

Yes, I believe that the accumulator constructions as described here are a good candidate. The same idea applied to Bitcoin is implemented by Tadge Dryja here


Isn't bribe smearing possible because no payee signature is required? The Bitcoin protocol does not require the payee to sign for a payment; only the payer signs (the payer signs a hash of the payee and payer's public keys). In other words, a payee signature is not required for a transaction to be added to the Ledger.

So wouldn't the following kind of smear attack be possible?

(If you're a Democrat, insert "Koch Brothers" for the Attacker; if you're a Republican, insert George Soros; etc.)

Victim runs for public office.
Attacker easily figures out Victim's public key(s) from the Bitcoin Ledger and other sources.
Attacker makes lots of big, expensive Bitcoin payments to Victim's public key(s) from mysterious payer public keys that are not (easily) traceable to the Attacker.
Attacker tips off Fox News/MSNBC/etc that Victim has been receiving enormous, shady Bitcoin payments, and all they have to do to verify this is look in the Ledger.
Victim's candidacy becomes engulfed in Fear, Uncertainty, and Doubt, and Victim's polls plummet.
Victim withdraws candidacy for public office long before the election.

Q1: Am I missing something, or does Bitcoin make this possible?

Q2: If it is possible, couldn't it be fixed by only accepting payments in the Ledger that are signed by both the payer and the payee?

TMIA.

The victim could send any "shady" or unauthorized donation back to the originating address, and the refund would be just as public as the initial donation.
The process could also be automated with a custom wallet software, so that, for example, all donations above a certain amount which are not explicitly approved are automatically refunded after x days.


How big will the block chain become? How big can the block chain become? It's already 7 GB after a couple years!

The block chain length in number of blocks will grow indefinitely with one block being created for 10 minutes on average.

The actual size of the whole chain will strongly depend on the following two aspects:

the number of transactions

The number of transactions in a block determine the size of the block. So, the more transactions are made in the network, the more information there has to be stored.

how the block chain will be stored across clients

Since the speed with which the block chain grows has been slightly increasing since the beginning of Bitcoin and the block chain is already significantly big, some of the Bitcoin developers have been considering to implement a solution for this that would make it unnecessary to keep a history since the beginning of time.

Currently already the standard Bitcoin client compresses the block chain for storage. The older blocks become, the more they are compressed. This means that you required less disk space to store the block chain, but also that it takes longer to start building it from scratch. Other clients have to decompress it to share it with you and you will have to compress everything you receive. This results in the fact that new clients often need multiple days to get in sync with the network.


Does GDAX use its own wallet to send Bitcoin on my behalf? I am new to cryptocurrencies and Bitcoin specifically. I recently made a transaction by transferring some Bitcoin from my GDAX wallet to my Binance wallet.

Here is my public key: https://blockchain.info/address/1CQUN1tN1BrD8dPtqFjUeKRGcdYmEhdafh

Why is the sender of the Bitcoin from an address that does not belong to me? I checked my GDAX public key which changes every time I refresh the page.

If you click on the the public key that sent the Bitcoin, it shows that it has made another transaction for 0.98504441 BTC to a different address.

So I have a few questions:

Why does my Bitcoin public address change everytime I refresh the page on GDAX?
Why does the sender of my Bitcoin also have another transaction to a different public key?
Does GDAX send out Bitcoin from a shared wallet on my behalf?

Thanks!

Answers to your questions:

1. GDAX generate a new address for every transaction, they consider a generated address as used. The reason for a new address is to protect your privacy, so a third-party can not view all other transactions associated with your account by looking up an address you have used before.

2. and 3. When a GDAX user sends digital currency from their wallet, the address it comes "from" is one of GDAX's many hot wallet addresses. Any coins sent back to that address would be sent to GDAX, not your own wallet. So yes, kind of like shared wallet.


minerd disappears when i try to launch it with a batch file? I started using pooler cpuminer v 2.3.3 yesterday and it works.
Today, it doesn't. I have no idea what the problem is, when I open the batch file, the minerd file disappears.

This is my command line thing:
http://pastebin.com/DyqstLrn

UPDATE: The thing that was causing the problem was Malwarebytes Anti-Malware. It works fine now, thanks for every one's support!

This is probably your antivirus either deleting or quarantining it.  Depending on your antivirus, you need to manually trust minerd.exe and/or restore it from quarantine.

I use Norton 360.  To unquarantine with Norton

Open Norton
Click tasks at the top
Click "Check Security History" on the left
Find minerd.exe, it might be easier to re-extract or re-download
Click more details
Click restore at the bottom

Comment and I will try for other antiviruses


My Multibit wallet is empty I had a few bitcoins in a Multibit wallet version 0.5.14 on my old computer.  I decided to start up the old computer again and transfer the bitcoins to a hard wallet.  I opened it up and there's nothing in it.  The wallet appears to have synchronized.  I can remember before I used to input a password to see what was in my wallet but that option doesn't come up anymore.  Does anybody have any advice?  Please don't be too technical in your replies.  Thanks.

Synchronisation status

First check Multibit's synchronisation status.

It probably shows a message on the bottom left status bar "wallet synchronised with network" (perhaps depending on exact version of Multibit software)

If it isnt synchronised yet, that might explain why it doesn't show the balance you expected.

Recovery from wallet words

There are two main versions of Multibit: Classic and HD. Both are no longer supported.

To recover a wallet from your wallet words (also known as recovery phrase or seed phrase) follow the instructions at

https://multibit.org/help/hd0.1/restore-wallet.html

  From the unlock screen click the "Restore" button and follow the instructions on the MultiBit HD screen.

There may be different instructions for different versions of Multibit (Classic, HD2, HD3 etc) - check the appropriate instructions for your exact version if possible.

It may take a while (days) to synchronise before it shows you a balance.

Multibit is unsupported

If your money becomes visible again, because Multibit wallet software is no longer supported, you should move your money into a different type of wallet. Multibit seem to suggest Electrum (electrum.org) - maybe that is closest to Multibit in terms of user interface? However there are many alternatives which you should probably consider.

Consider a hardware wallet or an offline-wallet/cold-wallet for longer term storage.


What does it mean to say that Huobi "self-match" trades? A reddit post claims that Huobi is faking trade volume by "self-matching" trades.

What does it mean to say that Huobi "self-match" trades?

It basically means that the exchange is showing false volume on their site.

Here is how:

Exchange inserts order to buy 1 btc @500USD/BTC
Exchange inserts order to sell 1 btc @500USD/BTC
Orders match and the exchange's trade volume has increased by 1btc.

But actually, no real trade has occurred. They artificially updated their records to attract more traders.

This would be harshly penalized if it was done by a regulated exchange.


Generate QR code for multiple cryptocurrency addresses I want to generate my own QR code with my main cryptocurrency addresses without using an online solution, is there maybe a command prompt way or particular piece of software I cam download for this, many thanks.

Also please move to correct section if this is in the wrong place

You could use offline JS libraries either with your browser or in your console.
Command Prompt
Requires NodeJS & NPM to be installed
npm install -g qrcode-terminal
qrcode-terminal '1SomeCryptoCurrencyAddressOrPK'
Offline in Browser
Or in your browser with an offline library
Save a copy of the raw qrcode.js file to your computer as a javascript file. https://raw.githubusercontent.com/davidshimjs/qrcodejs/master/qrcode.js
Then simply use it within an html file


Can I get confirmation time from txid (tx_hash)? I want to get how long it takes time to get first confirmation for each transactions.

My plan is this below.

I'm subscribing mempool txes notification from my bitcoind node and I will save it with time.
I receive a block generation notification which contains the saved mempool-tx. Then I will calculate the confirmation time. (confirmation time = mempool save time - block notification time)

I have two questions:

Do you think that the above way works well?
The above way is a little bit hassle. It would be easy if I can get the time by txid. Is it possible? or Do you have any better ideas?

Is it possible? or Do you have any better ideas?

No. You can predict with probability, but you cannot know for certain. Because block generation is a Poisson random event with an average discovery time of 10 minutes.


Historical transaction/trade ratio. Available? Useful? Blockchain.info lists both "Trade Volume" and "Estimated Transaction Volume" in both BTC and USD. It occurred to me that the ratio of one to the other might be a useful metric in determining how much of the Bitcoin market is currently speculative versus how much is actually being used for trade.

I would be interested to see if there were, for example, a much higher trade:transaction ratio during the buildup of the bubble than in previous or current days. It might also be a useful metric for determining whether the bubble is truly over and for predicting Bubble 2.0, should one ever occur.

Does anyone know of a good historical source for this data, or perhaps have both the programming acumen and time available to create a simple graph? Or have I missed something important, economically, that makes this information less useful than I'm currently assuming it to be?

You can access the data for each currency on each exchange with the Markets API from BitcoinCharts:

For example, for USD:

http://bitcoincharts.com/charts/chart.json?m=thUSD
http://bitcoincharts.com/charts/chart.json?m=mtgoxUSD


Same recovery phrase to two wallets? I created a bitcoin wallet on blockchain.info From my understanding, if I lose my account or if blockchain.info stops offering a wallet service (this probably wont happen, but just for the sake of my curiosity, lets pretend it does)I can use my recovery phrase to get my bitcoins to another wallet. How would I do it? Is this phrase the same as a private key? If not can I convert this phrase to a private key? Also, I have two wallets under my blockchain.info account, would the phrase recover both wallet's bitcoins or would it just merge all bitcoins into one wallet? Would I still use the same recovery sentence in case the same issue happens again?

Oh and by the way, I read somewhere that there are different wallets or phrases (BIP39, BIP32/44 or something like that) can someone explain that aswell?

blockchain.info's recovery phrase is a BIP 39 phrase. They use BIP 32 derivation and BIP 44 derivation paths IIRC. This means that you can use the recovery phrase to import your blockchain.info wallet into any other wallet that also support BIPs 32, 39, and 44. Since it uses BIP 32, you will have access to all of the private keys that you used on blockchain.info.


So exactly what is the value of a Bitcoin in relation to the American dollar? Ok, if I want to buy something that is $8 in American dollars and use a Bitcoin that is worth an odd value in American dollars...like $17 for instance. Then what happens? I end up with a deciminal point version of a Bitcoin? How does an individual keep track of Bitcoin money when it translates into too many decimal point locations? Doesnt Bitcoin have 8 or 10 decimal places? What happens if you buy something from a country where money is worth very little? Could you have a bitcoin account with a long decimal point fractional value?

One Bitcoin is actually 10 000 000 units in a transaction record, meaning that a Bitcoin is divisible down to eight decimal places. 1 unit is called a satoshi, named for the creator of Bitcoin.

Most world currencies don't go below two decimal places in daily usage, and only in financial systems do they go below four decimal places.

When someone says "There's only 21 million Bitcoin!", they are unaware that while there is 21,000,000 BTC ever in the whole system, there are actually 2,100,000,000,000,000 units in the whole system. That's 2.1 quadrillion units. In the unlikely event that, several decades or centuries down the line, there is a shortage causing significant flow problems, it is possible to further increase divisibility.


Could an algorithm be made ASIC-resistant by simply adding deterministic permutations depending on the hash of the previous block and the nonce? I was thinking of permuting bits in a block before it is hashed, in order to require some adaptability from the mining hardware while retaining the security of SHA-256.

Permutations would depend on the hash of the previous block so that they cannot be anticipated.
They would also depend on the nonce, so that the permutation step would have to be performed once per hash, preventing a single external CPU from efficiently preprocessing the data.

A simple example of algorithm:

Seed a pseudo-random number generator with the hash of the previous block appended to the nonce. Draw 1000 pairs of pseudo-random numbers between 1 and the length of the block in bits. Swap the bits corresponding to these pairs. Hash with SHA-256.

It seems to me these permutations would be particularly troublesome to implement electronically, and I was thinking this might drive up the cost of ASIC implementations.

Your solution will least at most a year until dynamically reconfigurable FPGAs appears in the market. Then creating any logic circuit on the fly will be possible, and so efficient FPGAs will outperform CPUs by a large margin.

See for example: http://en.wikipedia.org/wiki/Partial_re-configuration


What are the pitfalls of repurposing the nLocktime field for backward compatability in eltoo? In the eltoo proposal for paymentchannel management with less overhead proposed by Christian Decker et al. the update transactions need to be ordered. In chapter 4.1.2 of the proposal it is described for the sake of being backwards compatible that the nLocktime field can be repurposed within the update transactions.

Are there any other pitfalls of this solution besides the fact that it seams a little bit hacky?

I was hoping somebody else would answer this, since I am the author of eltoo, I would have preferred an independent answer.

To recap: the locktime is used in eltoo to enable a numeric comparison between an element on the stack (state number) and a value that the signature commits to. The reason we can't simply push a number on the stack ourselves is that this push would happen in the redeemScript, which cannot be committed in the signature, since it contains the signature. OP_CLTV combines the push, comparison and verification in one opcode:

  Marks transaction as invalid if the top stack item is greater than the transaction's nLockTime field, otherwise script evaluation continues as though an OP_NOP was executed.

To your question about it being safe: OP_CLTV is the only opcode that ever touches the nLocktime (intended to be used in the scriptPubkey), and the only other use is to mark a transaction as invalid until a certain height. Both usecases only specify what happens with future blockheights and timestamps, and do not have any effect if the nLocktime is in the past.

Therefore eltoo's use of the nLocktime field and OP_CLTV is technically not a repurposing, rather it makes use of the existing semantics.

Of course I can't foresee if there is any future proposal that might want to repurpose past blockheights and timestamps, but I'm not aware of any, and searching the BIPs doesn't return any conflicting results. It'd also be very unsafe redefine its semantics for timestamps that were plausible in the blockchain, leaving us a few million unique timestamps even if we only consider 2009-01-03 - today.


blockchain - strange problem I have Windows 7 and i’m using the bitcoin-qt client v0.8.6-beta.

Last night i tried to open up the client – but there was a message that said i had some issues with the blockchain. Which is weird, i never had any problem before so i closed it and reopened the client.

Then suddenly the blockchain started to download it self from the very beginning (!) backlog of like 260 weeks! But the old (and already downloaded) blockchain is still on my pc – so why dosen’t the client recognise it?

The bitcoins are still inside the wallet – or at least it shows them.

Perhabs your bitcoin datadir has moved. Try to start you client with the path to you folder containing the blockchain:

bitcoin-qt.exe -datadir=

Another posibility, the client is just reindexing the blockchain, not downloading. You can check this if you hover over the progressbar and look at the text.


createrawtransaction and fundrawtransaction I use createrawtransaction  for create a rawtransaction with [] "zero inputs" and one output.
I use fundrawtransaction for populate rawtrasaction with inputs.

{"method":"createrawtransaction","params":[[],{"mv8sTXT1FSAJENZNNoKb3BAHnersrC9c41":0.1}],"id":"null"}

{"method":"fundrawtransaction","params":["RESPONSE-CREATE-RAW-TRANSACTION",{"feeRate":"0.00031744"}],"id":"null"}

My question is, how many confirmations are the inputs added by fundrawtransaction? Can I configure the confirmations that the inputs will be selected?

There are many more parameters than number of confirmations for input selection.  It mainly depends on the amounts used in the outputs because eventually enough inputs have to be used to cover the costs, which means unconfirmed inputs might be used if that's all what the wallet has.

If you want to control the number of minimum confirmations that an input must have before it's considered available for funding, there are two options:

spendzeroconfchange=0 will tell the wallet never to spend an unconfirmed input (0 disables spending, 1 enables it and is default), and txconfirmtarget=6 which will means that an input must be buried beneath at least 6 blocks.

You can change 6 to be something else.


Coinbase, Bitpay and Bitcoin Core A website shows their services can be purchased via Coinbase and Bitpay.

I searched for information and found Bitcoin Core from bitcoin.org/en/choose-your-wallet and I think it is very popular among tens of wallet platforms.

What is the difference between Coinbase and Bitcoin Core? Is there any thing one can do but the other can not?
If I used an account with Bitcoin Core, will I be able to purchase their services?

There are also Dogecoin, Blackcoin and etc accepted by that company. What made people buying these new kind of coins rather than using Bitcoins?

Coinbase.com is a company that buys and sells bitcoins, as well as offers a service to manage your bitcoins for you, much like a bank manages your USD for you.

On the other hand, Bitcoin Core is a software that allows you to manage your bitcoins yourself. Bitcoin Core is not a company, so you cannot purchase any services from them.


Pros/Cons/Limitations of Mnemonic Phrases - BIP39 BIP39 mnemonic phrases replace considerations about how to store one private key, with considerations about how to store the seed to a series of private keys.

The idea is that the private keys are hard to remember, worse to write down, and prone to discovery when stored digitally, so the solution is that you can have a phrase of words that act as a seed to a hierarchical deterministic series of addresses.

It seems like this idea has been lost in translation as the phrase length of mnemonic phrases has increased from 12 words, to 24 words, with the "more secure than thou" using even longer words and phrases, and security minded companies alike promote writing down the mnemonic phrase, in multiple places.

or splitting the phrase, or putting an additional passphrase on top of the HD sequence, or using Shamir's secret key.....

all of which simply create more points of failure.

Ultimately: instead of one paper wallet compromising one private key, your paper phrase will compromise ALL of your private keys. OOPS. or you forget the secret key, or you lose a piece of the phrase, or you misspell it

At least we can be confident that the words themselves contain enough entropy to prevent guessing, RIGHT GUYS? RIGHT?

What are the pros, cons, limitations of BIP39, or at least my concerns. I have read the wiki and the github markdown on BIP39, and these do nothing to alleviate these concerns because these BIPs are a centralized process

to answer the first part;

generally speaking people will want to backup their whole wallet, not specific PKs.
so using a HD wallet and making a backup of the seed (either the seed or a BIP39 mnemonic doesn't matter) matches what people using 'normal' wallets do, you backup your whole wallet in 1 place (most wallets have a backup/export file for the whole wallet).

BIP32 - HD Wallets - (and BIP39) isn't supposed to replace being able to split your backups into multiple private keys being scattered around, it replaces a single wallet being backed up in a 'traditional' way, 1 file (or print) for the whole wallet.

also a BIP39 paper backup has the same issues as normal private key backups that you mention, if you loose the passphrase or mispel it ... it's gone ...

But if you want to spread the risk by splitting your bitcoins across multiple backups then you should just have multiple wallets to split them.

BIP39 is also only the process of converting a seed to mnemonic and back, your (above discussed) concerns are actually with HD wallets in general, which is BIP32 ;-)

now your only real concern regarding BIP39 is about the words containing enough entropy!
and they do, because the words are generated from a 128 or 256 bit entropy to begin with, the hex entropy is split into chunks of 11, which means you have a list of 0-2047 integers as a result.
that list of integers is translated to the words (and back to the hex and to the binary entropy when you use it).

Let me demonstrate that by showing you how one of the official test vectors is converted:

hex of entropy: 7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f

bits of entropy: 011111110111111101111111011111110111111101111111011111110111111101111111011111110111111101111111011111110111111101111111011111111000

chunked into 11 length parts:
 [0] => 01111111011
 [1] => 11111011111
 [2] => 11011111110
 [3] => 11111110111
 [4] => 11110111111
 [5] => 10111111101
 [6] => 11111101111
 [7] => 11101111111
 [8] => 01111111011
 [9] => 11111011111
[10] => 11011111110
[11] => 11111111000

those parts converted into words using the default word list:
legal winner thank year wave sausage worth useful legal winner thank yellow

the mnemonic together with the password TREZOR converted to a seed hex:
2e8905819b8723fe2c1d161860e5ee1830318dbf49a83bd451cfb8440c28bd6fa457fe1296106559a3c80937a1c1069be3a3a5bd381ee6260e8d9739fce1f607

now the cool part actually is that if you use a different password with the same mnemonic you get a different seed and thus a different wallet, you could have 2 wallets and if you get robbed only hand over the BTC in one of them ;-)


How do HD wallets use mnemonic to recover all private keys? As I understand, a wallet like BRD wallet can have many private keys and receiving addresses.

When I give them the mnemonic, how do they re-generate all of the relevant private keys from that mnemonic alone?

I saw a video on a master private key, and I cannot figure out how it all ties into it because I could generate multiple private keys from the master private keys, or I could generate multiple private keys from any of the children private keys of the master. How does the wallet know from just the mnemonic, which path I took?

mnemonics are the seed. you use that to get your private key.

the rest of the story as you have pointed out, is about deriving child key pairs. The process is deterministic (as the letter D in HD), meaning that you can get the same tree of child keys from the root seed whenever you do that. This could go "indefinitely", so how would you know when to stop? The answer is that you need additional information about the depths.

In the case without branches, you simply need to know how many keys have been generated (whether they received payment or not) to get the full balance. Most implementations of default look-ahead and will stop checking after a certain number of addresses don't have any UTXO.

With branches, it gets a bit more complicated. But in theory, if you know where things branch and how deep it go, you can restore the full tree.

[EDIT] in response to your comment, there are standard ways though. For example, this picture here shows the hierarchy.


Bitcoins being sent to another addres during a transaction I realized a few days back, that if I send some bitcoins to someone, then it shows in blockchain an extra amount sent to my own wallet. So if I send 0.5 BTC from wallet A to B then blockchain shows

A--> B 0.5
A-->A  1  (basically sending it to my wallet as well.)

Today I noticed a different wallet address during a transaction. So it was like

A--> B 0.2
A--> C 0.5

Checking address C on blockchain, it gets sent back to A in some time. But since this morning, the bitcoins haven't come back to A. If I open my wallet on multibit, it shows the correct balance. However on blockchain, it's 0.5 less. The funds from C have not been sent back to A, but it shows on multibit the right balance in A.

Your total bitcoin balance consists of the combined total of several addresses. Your wallet contains one, some or many addresses, all of which may have bitcoins on them.

So I think that when inspecting your wallet with a tool like pywallet, you will find that both A and C are there.


Do I need 145GB disk space to validate and relay transactions with Bitcoin Core? I wish to withdraw my bitcoin to an external wallet address under my control. I have downloaded a wallet software (Bitcoin Core) but I read that it's a full node that validates and relays transactions on the bitcoin network and requires more space (over 145GB). Does it mean that its node cannot validate and relay transactions unless my computer has about 145GB space? How do I know if my computer has the required space? Thank you.

Yes, it will not work unless it is fully synced. This means the entire blockchain needs to be downloaded from the genesis block. Not only you that you need the required space but the sync can also take some time depending on the speed of your computer (RAM/CPU/HDD) and the connection speed (blocks need to be downloaded from other nodes).

Checking the available free disk space on your computer is dependent on your operating system, but it should be something very simple (most operating system show the available disk space near partition letters).

You could use pruning if you use a recent enough version of Bitcoin Core but this still requires download and verifying all blocks.

If you look for a solution that does not require disk space and syncs very fast, look for a SPV wallet like Electrum but be advised that SPV (Simplified Payment Verification) does not provide the same level of security as a full node. Use with caution and you should be safe.


What if any proposed blockchain enhancements that require hard forks would require new ASIC hardware? From what little I know about ASIC they are not flexible with regard to the tasks that they can execute. Some of the proposals for scaling bitcoin up require hard forks in the blockchain. I read about one proposal about replacing the ECSDA signing algo with Schnorr that made me think of this question.

I'm wondering if any of these hard forks would actually mean that some or all current ASIC miners are rendered incompatible and worthless? This would of course have an impact upon which solutions are likely to go forward.

I expect it depends on the design on the chip, if only the core hashing power is offloaded to the ASIC but everything else is done on a more general CPU. Are most of them designed like this?

I don't think many hardforks would make ASICs obsolete. Developers would surely want to avoid that, and will always have a way to avoid it. Unless they have a reason to make all ASICs obsolete on purpose (extreme mis-behaviour by miners could theoretically cause that). In that case they could chose a different mining algorithm.

The ASIC simply gets fed the prepared header of a block and all it does is run hashes on it while increasing the nonce (32 bits) and possibly a few other bits (in the timestamp field) in case the nonce is too small. So only those bits that it actually touches could possibly cause the block to become invalid. It's highly unlikely that the developers would ever change the meaning of those bits in such a way that it would become more restrictive and cause the found blocks to become invalid under the new rules.

Hypothetically I guess one example could be where the developers decide to restrict the allowed error margin of timestamps in headers. Currently a block is allowed to have a smaller (older) timestamp than the previous block (up to two hours if I'm not mistaken). Suppose the developers decide that from now on it can only vary by 20 minutes. If the ASIC is happily incrementing the enough of the last bits of the timestamp field it could make it exceed that margin, making the block invalid under the new rules.

I guess ASIC manufacturers need to be a little bit careful, or make the ASICs flexible enough so that they can be told which bits to touch. Although I guess the above example might be a reason for the developers to never improve the timestamp accuracy (at least not in the straightforward way).


Are Bitcoin ASICs Optimized for Fixed Length Messages? Bitcoin block headers are 80 bytes.

int32_t nVersion;       // 4 bytes
uint256 hashPrevBlock;  // 32 bytes
uint256 hashMerkleRoot; // 32 bytes
uint32_t nTime;         // 4 bytes
uint32_t nBits;         // 4 bytes
uint32_t nNonce;        // 4 bytes
                        // total: 80 bytes

A SHA256 ASIC is specifically designed to (double) hash theses fields over and over until the resulting value is below the difficulty level, which is encoded by nBits.

Since it is a double hash, the ASIC has to be able to hash initial messages of length 80 and 32. After the padding required for SHA256, the byte strings that will be hashed have lengths 128 and 64, respectively. So, bitcoin ASICs obviously have to able to hash messages of length 128 and 64.

But say I have a file on my computer that is considerably longer (10,000x longer). Could I hash it with a SHA256 bitcoin ASIC?

Does it vary from SHA256-ASIC to SHA256-ASIC depending on how they are made?

What do you mean by "really long"? If it's bigger than (2^64-1)/8 bytes (~2,097,152 terabytes) then it's not going to work anyway because this is the theoretical limit of SHA256 and on top of that it would take a huge amount of time to complete, but then again I am not aware of many computers that can hold such great amounts of data.

For significantly smaller inputs it all comes down on the way the ASIC's SHA256 engine is implemented, what is the size of message (input) block in bits, how much memory is available per core in your SHA256 ASIC, etc. As per market standard, these cores are usually equipped with 128 kilobytes of memory. Of course nothing stops you from deploying external units of DRAM memory chips across memory-bus enabled ASICs but this will fire back in processing speed anyway.


Can we experiment on Signet with multiple proposed soft forks whilst maintaining the ability of full nodes to validate the Signet chain? One of the goals of Signet is to test proposed soft forks before they are activated on mainnet. Not only does this mean proposed soft forks such as Taproot that at the time of writing (August 2020) are at an advanced stage (BIPs reviewed, PR under review in Bitcoin Core codebase, activation discussion started) but potentially other proposed soft forks that are at a less advanced stage. It is also worth noting that despite Taproot being at an advanced stage there has still been discussion on changing the BIP (340). With less advanced proposed soft forks they could change and be updated at multiple points before either being activated on mainnet or rejected entirely.
How will Signet allow for this experimentation and testing on proposed soft forks whilst maintaining the ability for full nodes to validate the Signet chain from genesis?

The way Signet will likely address this is to have two classes of Signet full nodes. The first class of Signet full nodes will stay on a stable Signet version and only update once the proposed soft fork is activated on mainnet. The second class of Signet full nodes will run experimental Signet versions and as a result will need to update every time a new proposed soft fork is added or a change to an existing proposed soft fork is added. If they don't they risk being forked off the Signet chain. This is similar to full nodes needing to update immediately assuming there were regular hard forks.
As an example (credit to AJ Towns for this explanation), imagine there were three classes of full node.

Doesn't enforce Taproot at all
Enforces the current Taproot rules from block 800
Enforces a future new set of Taproot rules from block 2400 (assuming R tie breaker changes)

Class 1 is able to validate the entire chain by ignoring the new soft fork restrictions in the same way as pre-SegWit versions of Bitcoin Core on mainnet can treat SegWit spends as anyone-can-spend. Once the proposed soft fork is activated on mainnet these Signet full nodes can safely upgrade to what would likely be a new stable and non-experimental Signet version.
Class 2 though does start enforcing Taproot rules from block 800. When those Taproot rules change at block 2400 unless the Class 2 nodes update they will start rejecting transactions following the new Taproot rules as they won't recognize them. They will evaluate those transactions according to the old Taproot rules and they won't be valid Taproot spends according to those old rules.
Therefore Class 2 Signet full nodes will need to upgrade every time there is a new experimental Signet version. Obviously this isn't ideal but it seems a reasonable trade-off given that the whole purpose of Signet is experimentation and testing with no real value on the line. If you can't test things for fear of hard forking Signet it isn't providing the testbed and staging ground that is required before changes are considered for mainnet with hundreds of billions of dollars on the line.


Height mismatch between bitcoin-qt and bitcoin explorers I am running bitcoin-qt on the testnet. The count of the last block is 787794 which is way ahead of what I see on blockchain explorers such as https://test.webbtc.com/, which shows the last block as 787747. Why is there this difference ?

Apparently, there is a fork between 0.12.0 and 0.12.1 nodes.

Testnet is used to test new features of Bitcoin before they are released on the main network. Apparently, the newer version of Bitcoin created a block that was invalid under the rules of the older Bitcoin version. This caused the network to split, as the two versions now created two competing blocks at the same height, and are following separate chains.

Apparently, the softfork activation is being tested, which may cause your experience:

<phantomcircuit> nope
<phantomcircuit> like 50% of the hashing power currently on testnet randomly drops out for days at a time
<phantomcircuit> and im messing with the timestamps to get many many many more blocks than there should be
<phantomcircuit> the two things combined result in soft forks activating with way less than 95% of the hashing power


Easiest way to collect funds of big lists of bitcoin privatekeys I am setting up an webstore where you can pay with bitcoins. Therefore I created a bulk list on bitcoinaddress.org. I save the public addresses in a database and attach one to each transaction. Then I wait to recieve a notification from bitcoinmonitor.net and complete the transaction.

That will work fine I think, but how can I get the funds from all the different addresses? I know you can import in some software a private key, but it is too much work to do for each order. Do you know something easier to collect the funds of all the generated addresses?

I would import all the private keys into my wallet immediately after generating them with bitaddress.org.  There's no need to wait for them to be used.

See this answer for how to import the whole collection at once.


message signing: is it safe to publish the address, message and hash I want to use message signing in another application to prove a particular wallet owner did in fact make the transaction.  This as I understand it is what message signing/verification is for.

I just want to confirm that making the address, the message, and the hash fully public (open for the world to see) does not compromise the wallet security.  Also if I did this thousands of times on the same address, but each with a unique message and hash, the private keys would remain secure.

Thank you.

It shouldn't compromise the private key. Notice that publishing a message along with a signature is a common thing, and is necessary to verify the signature. Publishing also de Bitcoin address is similar to give the public key, since the former can be derived from the latter (actually, once you redeem your first transaction by signing it, you will provide the public key in the blockchain).

However, since you what to reuse the same key for signing multiple messages, there is something you should have in mind. There exist a well-known ECDSA vulnerability that affects the signing process, and by which if two different messages are signed using the same private random value k, anyone who knows the two original messages and the signature can derive the private key used to sign the messages. This is not likely to happen, since k should be chosen at random and from a good source of randomness, however some buggie implementations of the signature had lead to private key disclosure.

In order to ensure that this won't happen, you should use a deterministic ECDSA signature, in which k is chosen deterministically over the message to sign. Several wallets, like the Bitcoin Core, implement such a mechanism by default.


Why is such a large int (uint32) used for the transaction version field The transaction version field is a unsigned 32 bit integer. [Source Code] [Docs]

This will allow for 0 through 4,294,967,295 (2^32 − 1) versions. So far, only versions 0, 1, 2 have been used. It seems that the amount of storage for this field is wasteful. Surely unsigned 8 bit integer would be more than enough. What was the rational for using such a large integer?

Could this be reduced with a new block version? Could this be done without a hard fork?

What was the rational for using such a large integer?

Because Satoshi did not care about it. Bitcoin transaction serialization is not optimized for size.

  Could this be reduced with a new block version?

No

  Could this be done without a hard fork?

No. But you can implement new way to serialize data on disk and on network and encode/decode transaction contents on-the-fly. In fact nobody cares about these bytes.


How Would This Procedure Be Performed? Transfer to Offline wallet I've read alot of questions before I posted this... What I want to do is take my wallet from blockchain.info that contains a few bitcoins, and "store" it offline, however I have some specific questions if anyone can help:

I understand creating a paper wallet from blockchain.info's My Wallet. However, if I do this then won't any sensitive data still possibly be saved on their server(s), therefore rendering the paper wallet not completely secure?
In a partial answer to my first question, they have a way to generate and offline bitcoin address and corresponding private key. So would it be best to do that, and then from blockchain.info's My Wallet should I then send all bitcoins to this new bitcoin address, effectively eliminating any wallet that is saved in my account on that site? If that is the case, then:

would I even need a wallet? If my "paper wallet" shows the bitcoin address and its' corresponding private key, then is that all I need to put in a safe? just the bitcoin address that I sent all coins to from my wallet, and then that addresses private key?
should I delete any backups of the previous wallet that originally had the coins that I sent to this newly created offline address?
should I then close/delete my entire account on blockchain.info?

Forgive me if I sound redundant, but I guess I'm wondering if all I need to do is a "transaction" from my online wallet to a newly created 'offline' bitcoin address? In 10 years, in order to access these coins, I ONLY need that new bitcoin address and its private key?

I need to do is a "transaction" from my online wallet to a newly created 'offline' bitcoin address? In 10 years, in order to access these coins, I ONLY need that new bitcoin address and its private key?

Yes.

You can use Blockchain's product or print off an single address page from http://Bitaddress.org. Send a transaction to the public key and safely store that piece of paper until you next need it. Be very careful, though, because if you lose that piece of paper, you will lose the coins associated with that address.


Electrum Wallet: zero mBTC balance after sweeping private address Have the newest (3.+) ver. of Electrum Wallet.  I performed the sweep of the private address to acquire BTC from paper wallet .
Wallet menu->Private Keys-> Sweep.  Performed the operation, the screen showed me the entire amount in the paper wallet minus (I assume) transaction fees.

It's been about 12 hrs since sweep, the Electrum shows 0 mBTC balance, History is empty (I checked all addresses generated by Electrum W).  What advice would you have how to proceed from here and check where the funds are?   Electrum W. has rather non-intuitive manual and all the functions I try are giving me no response w.r.t. any incoming funds .

obv i would check the paper wallet address to make sure it is empty.

if it is, then i would input the tx id or the btc address into Blockchain and see what's up.
if you swept it correctly, then the funds are there somewhere.

also, if the amount swept was a lot and your fee was puny, be prepared to wait a very long time.

i see SO MANY NOOBS try to transact 5/10/40 btcs at once and pay a fee of $3!!!!!
not saying you did that....just saying


Script: How to check if the top item on the main stack is numeric or not? I'm looking for the clearest way to check whether the top element of the stack is numeric or not.
Thank you in advance

The best way that I know is quite involved because bitcoin-core standardness rules around Minimal representation of script ints. If you really need to do this, I can add detail in an updated answer.
Execution vs Satisfaction:
But in almost all cases, you should never really need to check such a thing. Recall that Bitcoin Script satisfaction requires Script executes successfully. At the end of the day, we are not interested in what is execution result, we are interested in whether the witness is valid or not. And the user redeeming the coins knows whether the pushed number is ScriptInt or not, they are let the interpreter know via additional boolean input.
Previous Code: where stack top is element `e`
OP_ISTOPNUMERIC # hypothetical that pushes 1 or 0 onto the stack top
OP_IF
    <process_num>
OP_ELSE
    <something_else>
OP_ENDIF

can be read written equivalently with two user input elements [e, e_is_num] where e_is_num is at stack top denoting whether e is numeric or not.
New code: with stack as `[e, e_is_num]`
OP_IF
    <process_num>
OP_ELSE
    <something_else>
OP_ENDIF


How to create a transaction without broadcasting I would like the create a transaction without broadcasting it to the network.

testmempoolaccept is a RPC which lets you dry-run submitting a transaction like sendrawtransaction, without actually pushing the transaction into your mempool or to the p2p network. Both function identically other than the final operation of broadcasting, so error messages can be considered equal.


You can generate several blocks and put (block_height, block_hash) pairs into the following field. Or just delete all of the checkingpoints : )

static Checkpoints::MapCheckpoints mapCheckpoints =
        boost::assign::map_list_of
        ( BLOCK_HEIGHT, uint256S("0xBLOCK_HASH"));

static const Checkpoints::CCheckpointData data = {
        &mapCheckpoints,
       bitcoin-cli getblock [last checkpoint block], then get the unix time, // * UNIX timestamp of last checkpoint block
        Write a script to count?,   // * total number of transactions between genesis and last checkpoint
                    //   (the tx=... number in the SetBestChain debug.log lines)
        estimate_a_number     // * estimated number of transactions per day after checkpoint
    };


Why do you use Bitcoin addresses instead of public keys? Why do you hash the public key twice? Are there security benefits to abstracting away from the public key? Is it because the address can represent multiple things? I'm missing something.

Could you theoretically send bitcoins directly to the public key?

Yes, you could send bitcoins directly to the public key: in fact, both Pay-to-PubKey (P2PK) and Pay-to-PubKey-Hash (P2PKH) were introduced in the first Bitcoin release.
IIRC, P2PK is still used for Coinbase transactions sometimes, today.

P2PK transactions are slightly bigger for outputs but significantly smaller for inputs.

One advantage of P2PKH is that addresses are shorter than public keys. This allows addresses to be represented with 34 characters in Base58check.
If there were a standard to present public keys in Base58check, they'd probably have 51 characters. Arguably, it is easier to type a character jumble that is only 34 characters than one that is 51 characters.

But really, addresses get used because there is a standard for them and there is none for public keys. Why that is so, I don't know.

All credit to Pieter, who has provided the knowledge to amend my errors. ;)

Also see this related question: Why does the default miner implementation use pay-to-pubkey?


What are the specific problems that Virtual Currency is solving? (in the Banking system, economics, and finance ) What is Virtual Currency is trying to solve, and how is it trying to solve them?

Many users of virtual currency (BTC, XRP, etc) talk about a corrupt banking system, and many other ideals, but I'd like to clearly see what specific problems its solving, or might potentially solve.

It seems that people's argument against "fiat" is being muddled with too many "benefits" of Bitcoin and so I'm looking for straight answers as to how Virtual Currency "fixes" the banking system. I'm not trying to debate Fiat vs non-fiat, but to really just get a list of problems solved with Bitcoin and virtual currency.

Some problems that come to mind with the fiat banking system are:

Transactions are never really "final" (unless you use cash) since banks or credit cards can "charge back" or "reverse" them at any future time simply because they take the side of your counter-party, often without even listening to your side
The justice system can take your money at any time.  If a court decides that your money may have been ill-gotten or that you owe someone else money (due to a lawsuit or divorce for example) they can unilaterally take as much as they see fit.
The legislative system can take your money at any time.  If a legislative body determines that it needs your money for some urgent need (such as to pay back national debt, as happened in Cyprus) they can unilaterally take as much as they see fit.
The bank themselves can take your money at any time (for example if they see your business as "risky" or suspect you of making money illegitimately).
The bank can (and virtually always does) limit your ability to access your own money.  They can make up rules about how much of your money you can withdraw in a certain time and question your purposes before allowing you to withdraw large amounts.
The banks, government agencies and potentially hackers have access to your transactions... who paid you, and who you paid and when.
Legislative and executive bodies in the government can change the value of your money at any time by manipulating interest rates and the money supply
Banks and governments can (and virtually always do) limit your ability to move your money across national borders. And even when they allow it, they charge banking and exchange fees, delay your transaction significantly, and subject it to increased scrutiny and record-keeping
Banks and governments can (and do) limit your ability to transact with anyone you want. If there is someone they want to starve of funding they will prevent you from paying them.
Banks allow a "pull" model of transaction.  In other words, not only you but anyone else can initiate a payment out of your account.  As long as the bank believes the transaction to be legitimate they will allow someone else to reach into your account and take your money.


Do the various Ripple clients leak any data about account names? If I use the official client at Ripple.com, and add someone to my contact list ... does the information "I believe that X's Ripple address is Y" get stored anywhere in unencrypted form? Is it broadcast to any central server?

I assume the answer is No, but I want to get an official confirmation. (These days many websites log a lot of user actions, my expectations from the Ripple client is that it does not).

The answer is no. Notations are stored only in your wallet which is always encrypted using your username and password.


Can separate Bitcoin chains be merged back? After a fork in a given chain, is it possible to merge the two chains back together so that they share the same blockchain?

No it's not, it must be a blockchain not a blockgraph, if two blocks share the same parent then only one of them can be in the chain, and because blocks can't be 'editted' without simply remining them, you have to choose either one chain or the other. Even if you could, do that, there's a host of other issues like the same coins being spent on both chains, or the block height in the coinbase being wrong


Does the U.S. Securities and Exchange Commission govern Bitcoin? Do SEC regulations apply to:

Exchange of Bitcoin for US dollars
Investing in companies with Bitcoin
An exchange that sells shares of company stock for Bitcoin
Bitcoin futures contracts

Is a Bitcoin a security?   The SEC hasn't said that it believes it is and not communicated with or taken action, formal or informal, asserting that a miner is issuing securities or that exchanges are engaging as brokers of a security, which is a regulated activity.

Is a Bitcoin an asset or commodity?   Does your grocery store need SEC approval to sell bananas?   Or, more similarly, does a coin dealer need SEC approval to sell gold and silver bullion?

Now a broker where gold bullion is speculated on is regulated in the U.S., just not by the SEC.  The Commodity Futures Trading Commission (CFTC) is the regulatory body that addresses that.  To-date, there are no bitcoin-related services offering futures contracts, options, or anything similar which operate from the U.S.

Now issuing shares in a company is exactly the activity the SEC addresses.  There are no bitcoin-related services issuing company securities or operating a secondary market for shares that operates from within the U.S.  The regulators may still assert jurisdiction though if securities are offered to investors from the U.S.

Now there may be registration requirements for an organization that holds deposits or where an exchange interacts with the banking system they may need to register as a money transmitter, but that is not something under the SEC's purview.


Is a Trezor hardware wallet dependent on wallet.trezor.io? A review of the Trezor hardware wallet says:

  In order to access your coins, you would simply do so by connecting your TREZOR to your computer and power up the TREZOR wallet interface at https://wallet.trezor.io. From here, you can see your balances, generate addresses for payment, and send payments.

If trezor.io disappears for any reason, is the Trezor hardware device useless? Are there other ways to spend cryptocoins tied to the private key in the Trezor that don't depend on trezor.io?

No, a Trezor is not dependent on trezor.io or SatoshiLabs still existing. You can use a Trezor with any wallet software that has implemented support for Trezors. One such wallet is Electrum.


Issues Still With Import Backup dat.file My computer has Windows 7 professional operating system.
I have my Wallet now synced as up-to-date.   I followed instructions from earlier post as follows:

Then you have to localize your Bitcoin folder. For Windows, it should be here:

%APPDATA%\Bitcoin

In that folder, there should be a wallet.dat file.

If you have currently no bitcoins in your wallet, you can just delete that file and replace it with your backup.
If you have some bitcoins in this wallet as well, backup that wallet file as well, or send all the coins to an address from your backed up wallet.
When you placed the other wallet.dat file in place, you should run Bitcoin-Qt with the -rescan option. Here's how to do that in Windows:

Go to C:\Program Files (x86)\Bitcoin using Windows Explorer.[My Bitcoin foldes in Only in Program Files Folder]
In that folder, hold shift and right-click and select Open command window here (picture). [I do not See this Choice]
In the command prompt, type bitcoin-qt.exe -rescan and hit enter (picture).

Therefore, main issue in have rescan option work.  Is there any other way to get this option to work inside Bitcoin Core Wallet application?

From Microsoft's documentation on how to open a command prompt window:

  Open the Command Prompt window by clicking the Start button, clicking All Programs, clicking Accessories, and
  then clicking Command Prompt.

Also:

  Here's another way to open a Command Prompt window: Click the Start
  button. In the Search box, type Command
  Prompt, and then, in the list of results, double-click Command Prompt.

Once you do that use the cd command to "change directory" to wherever Bitcoin is installed to (probably C:\Program Files (x86)\Bitcoin or C:\Program Files\Bitcoin).  From there you should be able to type bitcoin-qt.exe -rescan and be on your way!


Send payment and message at the same time I am using NBitcoin to write some code.  I want to send some bitcoin to an address AND include a message with it.  The message could say who the payment came from or why it was sent.  According to the demos, a txOut can have a destination or a message but not both.  Both are stored in the ScriptPubKey.

Edit.
Someone suggested I could use two Outputs, one for the payment and one for the message, but that doesn't seem to suggest there is a link between the two.

That's correct, you'd need to create two separate outputs.
OP_RETURN and payment outputs are two different output types that cannot be combined.
I don't know what you're trying to do, but generally, it should be unnecessary to provide a comment with a payment. All the payment related communication would already have been done out of band with the recipient finally providing an invoice address. Given the payer sending the payment to that invoice address, the payment is clearly associated with the invoice.

Note that any bitcoins included in the OP_RETURN output are burned and become unspendable. (H/T Jose Fonseca)


Is there a way to set the aggression for the OS X Diablo Minor? I run the OS X Diablo Minor on my new Macbook.  It seems to work well enough and it earns me a few bit-cents each day.

The only problem is that I have to cut it off whenever I'm working on the Mac, because it hogs the GPU.  Is there a parameter or some config file within the .app bundle that I can modify that will reduce the aggression level so I can use my Mac and mine with unused GPU cycles?

There's really no point in mining on a MacBook. It'll get super hot and the GPU will be totally bogged down. If you reduce the aggression, then you kill the point of mining altogether on your machine.


How secure are various models of Bitcoin clients? As there was some disagreement on security of various models of Bitcoin clients in comments to this answer, I'd like to address the problem.

How secure are various models of Bitcoin clients? Those would include the standard client, "lightweight client" (one keeping only block headers from old blocks), eWallets, client-server client (relying on one server for all information, but keeping a wallet separate), and the proposed Stratum client (relying on many servers for information).

Also, how does the security of such model rely on the person developing it (core Bitcoin team, reputable Bitcoin enthusiasts, people not known in the community)?

For example, "Stratum client offers security features X. If the server was created by a trusted party, the security concerns are Y, if the server was created by malevolent person, the security concerns are Z".

One way to look at security is to identify the risks. For a bitcoin client there are at least :

1. Theft of private keys

Mitigation:

1.1 Keys should be encrypted.

1.2 Keys should not available to servers.

1.3 Key generation should be done securely.

2. Loss of private keys

2.1 You should be able to backup your wallet or private keys.

3. Client software fails or is untrustworthy

3.1 Software should be open source so that you can build it yourself and inspect the code.

3.2 Software downloads should be signed by private key of author to prevent 'look-a-like' malicious software.

3.3 Author should spend time building their reputation (even if pseudonymous).

3.4 The software environment the client runs in should be resistant to attack.

MultiBit's scorecard

For MultiBit - which I am the lead developer on - the "Security Scorecard" is currently:

1.1 Currently no, planned for 0.3.0 release.

1.2 There is no server - purely local.

1.3 Keys are generated locally.

2.1 You can backup your wallet.  Key export and import is planned for 0.3.0 release.

3.1 Code is open source with an industry standard (Maven) build.

3.2 Currently no.

3.3 Author is a real public person - Jim Burton.

3.4 MultiBit uses a Java Virtual Machine - its security depends on the desktop machine not being rooted.


What format is the time of a Bitcoin transaction stored in? This may be a very simple question to answer, but I haven't been able to quickly find it.  Regardless, if you were to deconstruct a transaction in the blockchain, and pull out the time value of the transaction, what format is the time stamp in?

In other words, if you were to pull out the draw time value, how can I convert it to a meaningful value?

If you are literally referring to the "time" or "blocktime" property of a transaction within the blockchain, then this timestamp is in Unix format.

And if by "convert it to a meaningful value", you mean a human-readable format, you can use a unix command line (e.g. Terminal on OSX) to do a quick conversion:

Linux:

$ date -d @1395103695

Mac OSX:

$ date -j -f "%s" 1395103695

...which would return the following:

Mon Mar 17 14:48:15 HST 2014


Get the price of a currency at specific time in the past using binance historical data api I want to query the binance api for historical data but i want to indicate the specific time i want. For instance i want to know the price of etherum at 1103 hours Friday 31 August 2018.

Is this kind of thing possible on binance api?.

Maybe the klines api will suit your needs: https://github.com/binance-exchange/binance-official-api-docs/blob/master/rest-api.md#klinecandlestick-data

Kline/Candlestick data

GET /api/v1/klines

Kline/candlestick bars for a symbol. Klines are uniquely identified by their open time.

Weight: 1

Parameters:
Name    Type    Mandatory   Description
symbol  STRING  YES
interval    ENUM    YES
startTime   LONG    NO
endTime     LONG    NO
limit   INT     NO  Default 500; max 1000.

    If startTime and endTime are not sent, the most recent klines are returned.

Response:

[
  [
    1499040000000,      // Open time
    "0.01634790",       // Open
    "0.80000000",       // High
    "0.01575800",       // Low
    "0.01577100",       // Close
    "148976.11427815",  // Volume
    1499644799999,      // Close time
    "2434.19055334",    // Quote asset volume
    308,                // Number of trades
    "1756.87402397",    // Taker buy base asset volume
    "28.46694368",      // Taker buy quote asset volume
    "17928899.62484339" // Ignore.
  ]
]


How to recover forgot about Bitcoins I do not remember the details but I got some Bitcoins for free years ago. I think it was on a slot but can not be sure.  How can I go about trying to find out where I would have put them if I even kept them at all. I might even have lost them right back to the slot if that is where I got them. I just remember getting them at a time I never had heard of them. Just a thought.  why not find them if I can.

If you withdrew the BTC then you must have had a wallet somewhere to withdraw to. A wallet software could have been installed on your PC or, could be with a web wallet provider or, the balance could still be with your slots.

If you have no information about your wallet (check old emails for account information from a web wallet provider), cannot remember any details and, cannot find any evidence of any Bitcoin wallet on your PC (there are may but, they all make a data folder somewhere..) then, unfortunately, your BTC is lost.


Where is it possible to buy an ASIC? I know of Avalon and Butterfly Labs, but they aren't currently shipping. Does anyone know where, if anywhere it is possible to order and receive shipment before the year's out?

So far as I know, those two are the most advanced, and your best bet is going to be placing an order and waiting for it to ship.  Sadly, as I have one on order and am waiting impatiently.


binance advanced indicator api I know how to extract basic info like bid/ask/open/close prices on binance, but on advanced trading charts on binance I see more price indicators like EMA and I dont want to compute them from price log since they wont be 100% accurate. Is there a way to extract all indicators I see in advanced mode? Can't find any reference in APIs

Use https://taapi.io, there's a bunch of indicators (RSI, MACD, MA, EMA, TD Sequential, ATR, ADX, Bollinger Bands, Momentum, CMF etc...) that you can pull from their API. You can pull indicators from 20 different exchanges or so, including Binance.


Use Bitcoin RPC to send from many addresses to single address I am looking into being able to send coins from specific addresses to a single output address using bitcoin-cli

Is this possible? What RPC command would I use? Any chance of an example?

Yes that possible:

you need to know the txid and Vout index for those particular addresses when they were funded

for example here i have used 3 addressees to send some BTC  to single addresses 2N6V6Ko17CPWaZZf6YrGKeq8R1fzbqrTKLF and if  know the txid and vout of those addresses when they were funded i will do:

1)create raw tranaction

syntax: createrawtransaction   [{"txid":txid,"vout":n},...] {address:amount,...}

 bitcoin-cli -regtest createrawtransaction '[{"txid":"582283c5f2293a2cdb27173c3118ff59863d9ff2be5c3b48fa8e66509e9a7d0d","vout":1},{"txid":"3126fc2864fbf780460734dd1512b98e86f72f8e5b8b59047beae9dd859ac33a","vout":0},{"txid":"94a6701b68e38b3f980c9bf2b0e905dd7e479c7ed01590eeee20b1753c29d6af","vout":1}]' '{"2N6V6Ko17CPWaZZf6YrGKeq8R1fzbqrTKLF":"2"}'

2) Sign raw transaction:

syntax: signrawtransaction  <hexstring> [] [<privatekey1>,...]

bitcoin-cli -regtest  Signrawtransaction hexstring_from_createRawtransaction '[]'["pvtkey_add1","pvtkey_add2","pvtkey_add3"]

3) send raw transaction

syntax: sendrawtransaction hexString

bitcoin-cli -regtest hexString_from_signrawTransction


Will the size of a Bitcoin Core full node be too big to run on a normal computer? I am a Bitcoin enthusiast, with no background knowledge in computer science and cryptography. I once ran Bitcoin Core on my laptop but realized that it occupied too much space on my computer.
I understand the idea that Bitcoin network is secure as long as any individual can run the full node of Bitcoin Core. However, what concerns me is that one day the full node may become too large to run on a normal computer. Do Bitcoin developers have any solutions to this problem? Or is it really a problem?
I would like to hear some responses from cryptocurrency developers or specialists in computer science.

Bitcoin has to maintain some balance to be able to retain the ability to be decentralized. As you've correctly established, this is partly down to making sure that the resource requirements of fully validating the block chain are not unreasonable. There's a push form the consumer side of things to constantly increase the resource usage of Bitcoin for convenience or lower transaction fees, but this comes at the cost of decentralization. What the limits for this are is debatable to some extent, but there are clearly hard limits to avoid.
Most notably it's difficult to undo mistakes in this area of the system design, going too far with resource usage is effectively a permanent decision so you will find that choices have been made as conservative as reasonable.
We have the following limitations to contend with:

Size of the block chain. It is often advantageous to store previously validated information, even if it is not immediately required for the operation of the system. It makes wallet management easier and allows for easy re-synchronization if required. The limit of this can not be above reasonable cost or the size of volumes available to the mass-market.
Growth of the block chain size on dish currently is bounded by the block size limit. Knowing that 6 blocks happen on average per hour, and they can be a maximum of 4MiB when fully saturated with Segwit transactions, we have a bounded growth of 210 GiB per year.

Nodes can disgard these blocks once validated to avoid storing them, but the entire set must be transmitted to them in some form, typically over the internet but could be done via Bluray, Fedex, or carrier pigeon if this was cheaper or required. This is a limit for the size of the growth, as it must not exceed the ability of users to obtain the data needed to validate.

Size of the UTXO. The Unspent Transaction Outputs database is the storage of units of Bitcoin that have not been spent. This is consensus critical and must be stored by all nodes in the network who are fully validating. This database has looser restrictions on its growth, and is effectively bounded by the block size as well, as it implicitly limits the number of entries which can be added to the database. Unfortunately there is not much to be done to reduce the impact of this 4 GiB storage on disk without much larger economic changes to Bitcoin to allow for entries to be "archived".

Validation complexity. The transactions within the chain have a cost associated with their validation. ECDSA is used in Bitcoin due to it being extremely space efficient and suitable for the task, but it is not particularly fast even with completely optimized implementations. Synchronizing the Bitcoin chain involves billions of individual SHA256 and ECDSA operations which puts a hard limit on the number which can be performed by a consumer processor in a reasonable amount of time. The growth of the chain should not exceed the ability for reasonable, consumer hardware to complete validation.


Blockchain as a way to host truly free social website like reddit Some time ago I started wondering: what if we create a new coin and use its Blockchain to store a website content?

Bitcoin is P2P, that way it is almost impossible to block bitcoin. Everything in the ledger is public and saved for eternity, would be good for some subreddits which were deleted recently.

What if the mining process would be just making backup of already existing specified social media websites?

Are there any similar projects, which could be used as a base?

You're looking for Freenet, a p2p plataform which is only different from your idea in the fact that, to avoid wasting disk space, Freenet deletes old and unpopular content.


How can I have Bitcoind.exe use the core data from Bitcoin-QT on my D drive. Using Windows 10 I down loaded Bitcoin core to my D drive, because it's too big for my C drive. Bitcoind.exe keeps creating AppData/Roaming/bitcoin where the core is down loaded. However I already have the core fully down loaded to my "D:/Bitcoin Core data" What commands can I put into command line in Windows to direct bitcoind.exe to continue to write to the D Drive.  Also how would I create a short cut to replicate this with out having to always type it in the command line.

Is there any way to automate the process.

There are a few ways to do it one of which is modifying the shortcut as you've mentioned.

The easiest way is to create a bitcoin.conf file in %APPDATA%\Bitcoin. That's the default directory bitcoind will look for a configuration file.

Based on your question you can set the contents of bitcoin.conf to:

datadir=D:\Bitcoin Core data


How can "undo" bitcoin transactions be "private"? BitUndo private transactions:

  If you choose to make your undo transaction private, nobody will be
  able to see that you tried to undo a transaction, unless it succeed.
  You have to know that a private undo transaction has less chances to
  succeed, as is not distributed in the whole bitcoin network.

From what I know, for a undo transaction to even stand a chance of competing with the main transaction, it has to be broadcasted to the public network.

If so, then how does Bitundo "private transactions" work?

The failed transaction won't get stored in a block on the blockchain, so it will be hard for an average person to find them.  I think most of the Bitcoin nodes will delete them from memory eventually.

Also, these sneaky undo transactions are probably not broadcast so publicly in the same way that normal transactions are; they are probably sent to a smaller network of miners who want to participate in this undo system.


how to fix mining software make error? bfgminer bitcoin so i have bfgminer up on a linux machine running fine purring away at 67Mh/s solo mining (geforce gtx460)
im attempting to build on a windows 10 machine
i have tried msys2 mgwin32 and 64 bit
nothing seems to work i get errors in all stages: autogen, configure and make
im using mgwin64bit now and got to the make stage succesfully...
i am able to autogen, configure but when it comes to make i get an error:
make[3]: Leaving directory '/home/virtu/bfgminer/libblkmaker'
  CCLD     bfgminer.exe
C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: bfgminer-miner.o:miner.c:(.rdata$.refptr.cpus[.refptr.cpus]+0x0): undefined reference to `cpus'
collect2.exe: error: ld returned 1 exit status
make[2]: *** [Makefile:1340: bfgminer.exe] Error 1
make[2]: Leaving directory '/home/virtu/bfgminer'
make[1]: *** [Makefile:2844: all-recursive] Error 1
make[1]: Leaving directory '/home/virtu/bfgminer'
make: *** [Makefile:1209: all] Error 2

Could someone help me come up with a solution?
in the meantime i will return to mingw32 and attempt to fix the no gcc or c compatible compiler issue on autogen/configure

error in miner file, something to do with cpus
./configure with enable cpu mining fixed this
now able to make bfgminer
note similar issue from other users:
https://github.com/luke-jr/bfgminer/issues/787


Can anyone initiate a Blockchain transaction into the mining pool? Let's say user A has public key P and corresponding private key P'. Can someone else initiate a transaction for public key P with some wrong private key, let's say P''? Once this goes to the memory pool, miners will see that it is not signed with correct private key P' and will reject the transaction. Does it happen this way? Or is it that I can't initiate a transaction at all with wrong key?

Nodes store a mempool of valid transactions. An invalid transaction can never be in a block, so invalid transactions never make sense to store or relay around the network. You can make invalid transactions with invalid signatures, but it won’t be accepted by anything.


getting bitcoin address of blk*.dat files I know that getting the address from the blk*.dat files is discussed a lot of times. But I don't get it why? When I have the raw scriptSig I can encode it and get the bitcoin address or not?

E.g. the first block the first transation:

input scriptSig (this value is correct, as defined here: https://en.bitcoin.it/wiki/Genesis_block):

04ffff001d0104455468652054696d65732030332f4a616e2f32303039204368616e63656c6c6f72206f6e206272696e6b206f66207365636f6e64206261696c6f757420666f722062616e6b73

output scriptSig:

4104678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5fac

as written in here: https://en.bitcoin.it/wiki/Genesis_block
the address of the output is:

1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa

now, how to get from the scriptSig 4104678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5fac to the address 1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa?

If you try it here: http://gobittest.appspot.com/Address the output is NOT the expected address "1A1....."

First, note that the scriptSig on the genesis block was before addresses were used. The scriptSig there is called p2pk, or pay-to-pub-key. Addresses (the kind starting with a 1) are actually p2pkh, or pay-to-pub-key-hash. You can convert one to the other fairly easily and that's what's going on here.

The actual scriptSig can be parsed like so:

41 = number of bytes in hex of the element (65 bytes)
04...5f = public key
ac = OP_CHECKSIG

Plug in 04...5f into the Public ECDSA key at http://gobittest.appspot.com/Address and you'll see that the address does indeed match.


what is the different between bitcoin network and the bitcoin protocol protocol and network seem like two separate things. When peeps refer to bitcoin then it could mean protocol, software (what do they mean by that) or the network (what exactly do they mean by that ?) or currency ?

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

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


What does influence Bitcoin price so much? Please, make a hint why bitcoin price fluctuates so much almost every day. Is this fluctuation artificial? How is it organised?

As far as I know, there are already 12 million of bitcoins. On stock exchanges traders sell or buy rather modest sums, about hundreds or thousands of coins.

How can this influence (price drop of 10% a day) millions of other bitcoins so much?

The market is full offer and demand based. People sell, price goes down. People buy, price goes up.

The amount of people with new capital entering the market push the price up hard. Harder than the new Bitcoins, obtained through mining, are pushing it down.

You have to realize that people have to choose to sell or buy Bitcoin. The amount available is called "market depth" and it causes "market liquidity". http://mtgoxlive.com/ Is a display of "market depth". You can mouse over the blue and orange lines to see how many bitcoins must be bought or sold to bring the price to a certain point.

Then you will see that the 4684 bitcoins must be sold (at prices offered by others) to bring the best-available price to 550 Euros. To bring the price up, 3687 bitcoins must be bought to bring the best available price to 750 Euros.

Exchanges, real-time bids on Bitcoin for Euro or Euro for Bitcoin, are a method to find the "right price" of Bitcoin. Real-time exchanges fluctuate in the real world a lot too. It doesn't really work that well. But it succeeds in creating an acceptable price (if someone wishes to buy it for that price, it's worth that), and that's why the other Bitcoin are affected. People accept the spot price set by the people that use the exchanges.


When running a full node, why does the first inbound node have an unusual IP? When running getpeerinfo, most nodes show a standard addr like this:

95.121.82.153:8333

But the first inbound connection has a differently formatted addr like this:

[2a01:4f8:212:3b1f::2]:32220

What does this mean?

That's an IPv6 address.  Basically, it's the latest version for formatting/assigning IP addresses.  At some point, we should all be seeing a lot of those...but they've been saying that for years.


How to Create Wallet using Bitcoind How can i create a wallet for web based application for bitcoin i.e., unique address for each user along with the private key?

Does using bitcoind help me with this and how can i do this ?

I want to create wallet for each user who access a site. How can i do this?

Bitcoind getnewaddress '' command works and produces a new address but where is the private key for this address.

The getnewaddress command will create a new private key/address and associate this with the default account, which is "" (has no name).

You can assign private keys to different accounts by naming them, and if you used:

bitcoind getnewaddress "account1"

This would create a new private key/address for the account "account1". This doesn't create multiple wallet.dat files, just different accounts.

You could store all the keys in the bitcoin core wallet and have each web users "wallet" be created as a different account in bitcoin core.


How to see highest available block number in "Bitcoin Wallet" app for Android (Schildbach wallet)? If I have downloaded the "Bitcoin Wallet" by "Bitcoin Wallet Developers" (Schildbach wallet) onto an Android phone from the Google Play store, how can I see the latest block number that the wallet knows about?

At the main screen tap the menu icon (three dots at top right) and choose "Network Monitor" from the available options.

Then swipe left to switch from the "Peers" tab to the "Blocks" tab.

The top of this list shows the highest block number that the app knows about.


Regtest automated peer discovery I want to test peer discovery in regtest mode of bitcoin core, running in Docker.
However, I noticed in the source code of bitcoin core that there is a check if the address is routable before answering to a getaddr message. So I first create a network with routable addresses (IsRFC6598):

docker network create -d bridge --subnet 100.64.0.0/10 bridge_sharedrange

Then I launch four Docker machines with bitcoind installed (and using the bridge_sharedrange network, with different /16 addresses). The bitcoin daemon is then started in all of these four machines with:

bitcoind -regtest -daemon

Running ifconfig on these nodes show that they are running on 100.64.0.2, 100.65.0.2, 100.66.0.2, 100.67.0.2. From the first machine (100.64.0.2) I then execute the command:

bitcoin-cli addnode 100.65.0.2 add

From the third machine (100.66.0.2) I then execute the command:

bitcoin-cli addnode 100.65.0.2 add

So basically, the node with address 100.65.0.2 now has two peers (checked with bitcoin-cli getpeerinfo). I would expect now that

100.64.0.2 learned about 100.66.0.2 &
100.66.0.2 learned about 100.64.0.2

But that is not the case. They only know 100.65.0.2. Is this normal behaviour? I read on https://en.bitcoin.it/wiki/Satoshi_Client_Node_Discovery#Command_Line_Provided_Addresses that it might have to do with the timestamp of the addr, but I'm not certian this can be the cause, and how can circumvent that.

BTW, I also tested with

bitcoind -regtest -daemon -discover=1

Update: It seems this feature of discovering local LAN nodes is under discussion: https://github.com/bitcoin/bitcoin/issues/3802 , however I would think that the WAN rules apply to my situation, as I use RFC6598 addresses in my test set-up.

Bitcoin Core does not immediately broadcast a new addr message to nodes with each new connection it gets. On average, those broadcasts are every 30 seconds, but they could happen sooner or later than that as the delay follows a Poisson distribution. You should wait a few minutes before checking again. Furthermore, just because they know about the address does not mean that the nodes will actually choose to connect to them.


Where exactly is the "off-by-one" difficulty bug? I read through How is difficulty calculated? and want to understand where the "off-by-one" bug is in calculating difficulty. Here is a Matlab snipet I wrote to calculate difficulty. What are the correct block step intervals that I should use? Note: minv and maxv are the block heights (plus 1) of the interval. Thus, time stamps from block heights 0 and 2015 are used in the first difficulty calculation.

% Calculate difficulty
num = floor(length(block_chain)/2016);
minv = 1;
maxv = 2016;
target = 1209600;
difficulty = ones(num,4);
delta = zeros(num,1);
timedif = delta;

for i = 1:num
    if i == 1
        difficulty(1,3) = 1;
        timedif(i) = block_chain(maxv,2) - block_chain(minv,2);
    else
        timedif(i) = block_chain(maxv,2) - block_chain(minv,2);
        delta(i) = max(0.25,min(target/timedif(i),4));
        difficulty(i,3) = max(1,difficulty(i-1,3)*delta(i));
    end
    difficulty(i,:) = [block_chain(minv,1), block_chain(maxv,1),...
        difficulty(i,3), timedif(i)];
    minv = maxv + 1;
    maxv = maxv + 2016;
end

From Litecoin wiki:

  Time warp bug[14]: the Bitcoin difficulty calculation is off by one block, so an attacker can repeatedly try to generate the last block of each retarget window, and use a fabricated timestamp of 2 hours into the future in order to make the time difference from the first block in the retarget window high, thus lowering the difficulty by 0.5%. Because of the bug, the bogus timestamp isn't used as the first block in the next retarget window, and therefore the 2 extra hours aren't being compensated for in the next difficulty calculation. Once the difficulty is low, the attacker can mine many fast coins, or in the case of a small chain, an attacker with 51% hash power could reduce the difficulty to 1 and mine a new fork from the genesis block. This isn't a feasible attack on Bitcoin, because the probability of repeatedly generating the last block once every 2 weeks at such high difficulties is negligible. Although fixing this issue in Bitcoin is possible, it should be done carefully (by adding rules that encourage nodes to upgrade over time) so to avoid a chain fork, i.e. old clients who didn't upgrade might operate with another difficulty and therefore disagree regarding which blocks are valid. In Litecoin this bug is fixed

The "off-by-one" or Time Warp Bug is caused because the difficulty calculation algorithm is not using overlapping periods, for the first recalc it uses blocks 1 up to 2016 and for the second it uses blocks 2017 up to 4032.

This alone is not a problem at all, but as the protocol has some allowance for time differences between the nodes this makes possible to lower the difficulty forging blocks with resolution time in the future.

The algorithm uses T(2016) - T(1) to calculate the speed of the network if block 2016 is created with a timestamp 2 hours in the future (max allowed by the protocol) then the difficulty will be a 0.5% lower of what it should be.

If then block 2017 is found and the time is real (T(2017) can be less than T(2016)) then the extra time added to block 2016 will not be compensated in the next recalculation as it would be if for block 2 used T(4032) - T(2016) to find the speed.

A more detailed attack scheme can be found at: https://bitcointalk.org/index.php?topic=43692.msg521772#msg521772


Can I make instant profits in this way? Different exchanges have different rates to buy BTC.

So, how about buying in an exchange which has a lower BTC rate, send that BTC to an exchange which has higher sell rate, and sell to make a profit?

Yes, you can do that, but it may be difficult to do. This process is called arbitrage and is something that occurs in other markets, not just in cryptocurrency trading.

Keep in mind that if you do this, the price difference might be gone by the time that the other exchange accepts the deposit.

Alternatively, if you have enough capital, you can keep money on multiple exchanges and make same sized trades (e.g. buy 1 BTC on one exchange and sell 1 BTC on the other). However you will still need to rebalance by making transactions, and during that time, you will not be able to perform arbitrage.


Is there a good website or resource comparing how all exchanges are structured under the hood? So one of the issues I am running into is that there are competing definitions for things like: exchange, broker, trading platform, exchange platform, centralized, decentralized, P2P trading, etc. And also the websites often don't come out and say exactly how the operation is structured.
Regardless of what words you use to describe them, there is a difference between how things like Coinbase vs. Binance vs. Uniswap vs. eToro vs. LocalBitcoins are owned, organized, and operated. Is there a good resource that explains the differences in unambiguous language between all the services you can use to trade Bitcoin?

I can't say I've seen one. These links list resources and exchanges:
https://bitcoin.org/en/resources
https://bitcoin.org/en/exchanges
It might be worth looking at crypto venture capital companies to see if they have any market overviews.


Help me understand Instawallet better to trust it more! I have read the FAQ. I like the idea it's only  a link, I don't need it to be more complicated than necessary. For me it doesn't matter to store a generated difficult password for an account or only a link. But this way the login process is easier and the developer seems to be working on some pretty innovative features which is cool.

Basically it all boils down with all these online wallets is how much you trust the people behind them, right? Of course, you don't store on them big money but it's a convenient way to spend some BTC.

One good question is who is behind Instawallet? Financially. It forms a network with Bitcoin Central, Instawire, Paytunia and Paymium, though the terms and guarantees are different. Instawallet comes with to guarantee but Bitcoin Central is a registered payment processor in France.

Why is it good that Instawallet "launders," or structures the money in various transaction sizes and through various Bitcoin addresses? Though, I can understand it'b beneficial for some (on the Silk Road market) but it takes up to 24 hours to receive funds which is a drawback. But hey it's free! I mean I don't really understand when the bitcoin network charges a transaction fee and when it isn't. If you can tell me in a newbie friendly way.

Also, in what cases Instawallet's green address is useful? For a simple product purchase in the Bitcoin marketplace you don't need one, right? Your funds can go from various addresses, you just receive a confirmation number from the merchant (just like with an online or offline credit card purchase) and that's what you need besides your funds being sent.

Instawallet doesn't support green addresses anymore.

It would have required to maintain a fork of the Bitcoin client which is not very practical, and probably not very secure either.

Instawallet works as a simple shared wallet, it monitors transactions coming in to each wallet's address and adds them to the wallet's ledger as they come in.

When transactions are sent from a wallet they are simply sent using the Bitcoin client, which will pick random addresses from the pool of funded addresses, that is why you can't derive the balance of a wallet or track its activity by looking at the block chain.

That also makes it an useful privacy-protection tool. (But contrary to what I saw written in a couple places it is absolutely useless to hop through multiple wallets, it doesn't increase anonymity in any way).


Check transaction per block in Bitcoin what is bitcoin-cli command for checking how many transaction per block ?
Thanks you

getblockstats

  "txs" : n,                   (numeric) The number of transactions (including coinbase)

Example
C:\Program Files\Bitcoin\daemon> bitcoin-cli getblockcount
627251

C:\Program Files\Bitcoin\daemon> bitcoin-cli getblockstats 627251 | findstr /C:"\"txs\":"
  "txs": 2103,

The full output contains lots of other information
C:\Program Files\Bitcoin\daemon> bitcoin-cli getblockstats 627251
{
  "avgfee": 8359,
  "avgfeerate": 17,
  "avgtxsize": 571,
  "blockhash": "000000000000000000070ab39c953fd599b27da2c171476d2b2e8533484130bd",
  "feerate_percentiles": [
    7,
    7,
    8,
    25,
    30
  ],
  "height": 627251,
  "ins": 6108,
  "maxfee": 1598037,
  "maxfeerate": 387,
  "maxtxsize": 99011,
  "medianfee": 4007,
  "mediantime": 1587620811,
  "mediantxsize": 249,
  "minfee": 162,
  "minfeerate": 1,
  "mintxsize": 188,
  "outs": 4844,
  "subsidy": 1250000000,
  "swtotal_size": 550012,
  "swtotal_weight": 1383607,
  "swtxs": 893,
  "time": 1587623122,
  "total_out": 403374241843,
  "total_size": 1202103,
  "total_weight": 3991971,
  "totalfee": 17572435,
  "txs": 2103,
  "utxo_increase": -1264,
  "utxo_size_inc": -94315
}


Reports of Cryptocurrency Exchanges faking volume trade data. Where can one find this report? In 2018 December there was a research report on cryptocurrency exchanges faking volume trade data. Where can one find this report on these exchanges? Supposedly the only 2 exchanges that had real trade volume was Bitfinex and Binance. I'd like to know what were the rest.

All online roads seem to lead to https://www.blockchaintransparency.org


How does blockchain technology handle the actual transaction data? My understanding of how a transaction is secured in blockchain, especially in bitcoin, is that the output of transaction data is locked to the recipient's address (a shorter version of his public key). When the recipient decides to use the token locked to his address, he generates a digital signature using his private key and runs a CHECKSIG function on his address and the digital signature to prove that he owns the private key. I assume the CHECKSIG function will return a True and unfreeze the cryptocurrency if the digital signature matches the locked address (i.e., public key).

However, it looks like the transaction is just a number concatenating outbound address and recipient's address plus the inputs and outputs (i.e., how much money is exchanged between two addresses). This website provides a closer look at the components of transaction data.

  Then how is the actual transaction data stored, encrypted and sent via
  blockchain?

For example, if A decides to buy some merchandise from B using cryptocurrency (merchandise can be digitalized, say, some valuable digital files), how are these files stored, encrypted and sent to B on the blockchain? Does blockchain technology handle the security issue of the actual digital merchandise?

how are these files stored, encrypted and sent to B on the blockchain?

They aren't. Those files are not stored on the blockchain nor are they transmitted to B using the blockchain.

  Does blockchain technology handle the security of the actual digital merchandise?

It can, if you make one that does. Bitcoin's does not.