How does a gateway IOU differ from any other IOU on the Ripple network? How does a gateway IOU differ from any other IOU on the Ripple network? Say, if I got a $1000 from a gateway, does that make it a better currency than say, creating a second account and sending myself $1000 through that? Does the Ripple network somehow distinguish between those?

It doesn't differ.

Gateways are just issuers that you somehow have more trust for, so much trust that their IOUs can basically be treated like cash.

This is what happens in the current financial system, when you see $100 on your bank account it doesn't mean that you actually have $100. It just means that you hold your bank IOUs.

From what I understand there is no technical distinction between both types of IOUs.


Custom validation logic for transactions/ custom script extensions Is it possible to add a hook for custom validation of transactions with a special script "tag" in them? If so, How? In essence, I want to add something similar in  functionality to bitcoin script, but far more complex that what that supports. It doesn't matter if most clients/servers will not recognize the extended bitcoin script , provided they will ignore it.

The idea is that a node, when seeing a transaction with a special script payload, would call some external validation routine and only if that succeeded would it then run the standard integrity checks.

Are there supported hooks for this in the JSON-RPC API, any of the various clients, or would it require extensive modification of the source ?

It would require a change in the protocol to allow for the use of external validation routines, or any bitcoins spent using the "special" script will never again be spendable by any standard Bitcoin client.

None of the currently available clients offer this feature.


How does a non-segwit full node ensure validation of the blockchain? Let's say a block been created with most tx are segwit , now the block is more then 1MB and will be near to 4MB, I understand that a non-SegWit node ( let's say bitcoin-core 0.15 ) cannot get a block with that size, so How does it see this block as valid ? and if it's because the transactions omit the part of segwit in the inputs then how can the legacy nodes validate the block ?

Non-segwit nodes validate blocks in the exact same way they did before. The still check the Proof of Work, they still check the inputs and outputs of a transaction, they still verify scripts, etc. Everything is validated the same way as was validated before segwit.

The only difference is that with segwit inputs, the non-segwit node does not validate the signature because it does not have access to that data nor does it know how to interpret it. The scriptSig and scriptPubKeys for segwit inputs are still validated as normal scripts and still validate to true (they were designed to always validate to true).

Segwit does not redefine anything that was already in Bitcoin. Instead it defined a new  standard output script, with that output script already being valid without segwit. So blocks and transactions that contain spends of such outputs will always see those as valid, even if the new data required for such outputs (i.e. the signatures) is invalid.


Which files do you recommend I start with to learn Bitcoin? In the bitcoin/src, which files are the "main" files I should start with if I want to learn how Bitcoin works? In other words, where's it good to branch off from?

I'm new to C++, but can code okay in PHP and Python. I'm learning C++ along the way.

I certainly appreciate your level of enthusiasm to want to dig straight into the code, but if I were you I'd start with the Developer Guide on bitcoin.org, and perhaps also the Developer Reference. A whole lot of effort has gone into this documentation (especially thanks to this guy), and I think you'd be remiss to not to take advantage of it.

After digesting some of that content, you'll have a better idea of what particular aspect of Bitcoin Core interests you the most. As I'm sure you've noticed, it's a rather large codebase, covering consensus issues, blockchain/storage/pruning issues, elliptic curve cryptography, DOS issues, Bitcoin scripting issues, Bloom filters, wallet issues, UI issues, and tons of other things I can't begin to fathom. After getting a good technical overview of Bitcoin and posing a more specific question, I'm sure someone (perhaps not me) can give you a more specific staring point.


Arbitrary access to already confirmed transactions This link mentions that

"[getdata] can be used to retrieve transactions, but only if they are in the memory pool or relay set - arbitrary access to transactions in the chain is not allowed..."

But can't an SPV node do the following to have the arbitrary access to a transaction T (I am assuming that the SPV node knows the block hash H of the block B containing T):

set a bloom filter using filterload for T at some full node
send getdata request with type MSG_FILTERED_BLOCK and block hash H
then in response, the full node will generate two messages for the SPV node: first, a merkleblock of B; and second, the transaction T (as mentioned here and here)

Doesn't this mechanism actually gives arbitrary access to transactions?

That is based on the minimum indexing required to run a full-node.

A getdata msg to peers can only request TX resources in mempool (valid, unconfirmed). Not all full-nodes index confirmed transactions. UTXO and mempool tx are necessarily indexed for validation and tx propagation/block template creation respectively.

Confirmed transaction are supplied as part of getdata request with blockhashes. Blocks are indexed by all full-nodes. (Since new block-headers must reference previous headers, even if they are branch-extending, vs strong-chain extending)

Correction(see comment below):


Ripple: How is an UNL (unique node list) constructed? I am interested in UNL construction.
If some server S is on the UNL of server T, does this imply that server T is on the UNL of server S?
Or in other words if I constructed an UNL graph would it be a directed graph?

Most servers aren't validators and so cannot appear on anyone else's UNL.


Using the main Bitcoin-Qt Client, can you change where it stores the block chain? I don't want 12 gigabytes stored on my boot drive.  Can I change where the  Bitcoin-Qt stores the block chain?

You surely can. Just add -datadir parameter to the command line, when starting bitcoin-qt.
For example:

  bitcoin-qt.exe -datadir=D:\BITCOINDATA


Deterministic keys with one-way operation BIP 0032 "Security Implications" states

  One weakness that may not be immediately obvious, is that knowledge of
  a parent extended public key plus any non-hardened private key
  descending from it is equivalent to knowing the parent extended
  private key (and thus every private and public key descending from
  it).

From what I understand, the weakness is due to the reversible nature of the operation on extended public key (addition). Wouldn't it be possible to address this by using a one-way function like hashing instead of addition?

If you use a one-way hash function (ie like hashing ECDSA public key with SHA256/RIPEMD160 into a hex public key) then how can you employ hierarchical deterministic functioning?

You can't. The whole point here is that if you lose your private key for a grandchild public key you can get it back again with the parent key. A two-way hashing function obfuscating the data would work but that's basically what's already in place.


Will Bitcoin Transaction Evicted From Mempool Disappear From Blockchain Explorer? From the question below I can see the circumstances under which a transaction will be removed from the Bitcoin mempool :-

How do transactions leave the memory pool?

Whilst a transaction is still unconfirmed, it shows up in the Blockchain.info Explorer as an 'Unconfirmed Transaction!', within a red colored button. This button then turns to blue with "1 Confirmations" when the transaction is confirmed.

However if the transaction remains unconfirmed for a long time and the button remains at red, and if the transaction is then eventually "evicted" from the mempool, will the Blockchain Explorer then just report "Transaction Not Found" when I search for the transaction's id ?

I would find this behaviour useful as it would allow me to tell when a transaction has effectively been cancelled. If the red button is still showing, I know my transaction may still have a chance of confirmation, and I may be prepared to wait a few days in some cases for non-urgent transfers, especially when fees are at very high levels. If the transaction disappears altogether then I know I would have to submit a new transaction entirely. (I would actually prefer that a wallet did not automatically resubmit a failed transaction, but rather let me know it has failed).

Many thanks

First of all, there is no "the Bitcoin mempool". Each node has its own mempool, so if the transaction is evicted from one node's mempool, there is no guarantee that it has been evicted from other node's mempools.

If most nodes have evicted a transaction, it still may appear on a blockchain explorer because they may have other configuration settings which has them have a larger mempool and hold onto transactions for longer. Generally blockchain explorers have less restrictive mempool configurations than most nodes, so if a transaction disappears from multiple block explorer's mempools, then it is likely that most nodes on the network have evicted the transaction.


With the strongest hardware today, how long does it take to brute force or generate 10^18 bitcoin address as fast as possible? I see this kind of question before on this topics, but lots of them seems very old. Arcording to Moore's law, computer speed doubles every two year, so i wonder how fast have they archive these days. Can supercomputer capable of doing such a thing?

My laptop, running an i7-4XXX can hit about 1 millions keys per second using a vanity address generator at its peak. This usually slows down as it heats up, and it is certainly possible to go faster with GPUs.

Assuming the strongest hardware today is 10000x faster, or can generate 10 billion keys per second, you will reach 10^18 in 10^18/10^10 seconds, which is 1157 days.

Note that the Bitcoin keyspace is much larger, about 2^256 (although I believe you "only" need to crack 2^128 to start breaking into stuff with high probability, but I can't find that reference right now). For 2^256 keys, even at 10 billion per second, it would take you 3.672×10^59 years, which is 2.7×10^49 times the age of the universe.

Edit:

You would only need to go through 2^160 combinations to break a p2pkh address, since you only need to beat the HASH160. This reduces your time to only 4.631×10^30 years.


Why would you pay a trading fee for Ripples? Some exchanges (including BitStamp, JustCoin, Kraken, and many others) charge a nominal 0.5% trading fee for matched orders. However, it is also possible to trade directly on the Ripple network with the same order book by using the Ripple client and setting the issuer to the respective exchange, thus avoiding the fee. Why would anyone pay a trading fee? (Other fees, like deposit/withdrawal transaction fees, make more sense to me.)

For the same reason you'd choose one exchange over another (in general) even if the other has lower fees. Examples of reasons not related to trading fees for which one might prefer a particular exchange:

Higher volume/liquidity
Better ergonomics
Faster trade execution
Easier deposits/withdrawals (especially when fiat is concerned)
More trading pairs
More reliable


Mining Bitcoin on Linux with CUDA? I have a Linux machine with an Nvidia GPU (GeForce GTX 760). Is there a tool, rather than writing your own, that can currently mine Bitcoin using CUDA on Linux?

There is a program called CudaMiner that can be compiled to run on Linux.
https://github.com/cbuchner1/CudaMiner/
I've also written some more notes about compiling CudaMiner here
http://www.fractured-state.com/2014/03/scrypt-mining-on-aws-nvidia-gpu-with-cudaminer/
UPDATE:
The second link is dead already, but a similar tutorial is detailed in this thread:
https://www.reddit.com/r/dogemining/comments/1y3ygr/dogecoin_guide_for_mining_on_linux_ubuntumint/


Storing your private key on a "security server"? One of the suggested security precautions  when storing Bitcoin of users on a server is to store the private keys on a separate server:

The database storing the private keys or the seeds in case of HD
wallets should be running on a separate instance and only accessible
via the application server(AWS allows lots of configuration you can
make in the virtual private cloud i.e. VPC to accomplish this).

I understand that if the PK is stored on a separate server then that server would also need to be compromised in order for the security of the actual keys to be compromised. However, since presumably, the main server will be sending withdrawal/transfer requests to the "security server" what stops a hijacker from effectively liquidating the entire wallet balance by using the main server to forward requests to the security server? In other words, what is gained by adding an extra server to the equation if the security server is expected to "honor" (and sign) requests it receives from the main server?

Usually we try to discourage storing private keys on a server at all unless absolutely necessary.
However, if necessary, just having the keys on a separate server increases the complexity of the attack, as it's an extra step. But, in addition to that, you may employ things like rate limits, limits on transaction size, whitelists on addresses that can be sent to, etc. If there is unusually high transaction volume, a site operator could be notified to step in and review the activity log. In essence, you're right, such a system does have the risk of a hacker who has completely exploited the application server just using the application server to forward requests. But we can slow them down to limit the extent of possible damage.


Why don't the timestamps in the block chain always increase? The timestamps starting at block 145044 are:

145044: 2011-09-12 15:46:39
145045: 2011-09-12 16:05:07
145046: 2011-09-12 16:00:05 // ~5 minutes before prior block
145047: 2011-09-12 15:53:36 // ~7 & ~12 minutes before 2 prior blocks
145048: 2011-09-12 16:04:06 // after 2 prior blocks but still before 145045

How does this occur?

From the wiki:

  A timestamp is accepted as valid if it is greater than the median
  timestamp of previous 11 blocks, and less than the network-adjusted
  time + 2 hours. "Network-adjusted time" is the median of the
  timestamps returned by all nodes connected to you.

  Whenever a node connects to another node, it gets a UTC timestamp from
  it, and stores its offset from node-local UTC. The network-adjusted
  time is then the node-local UTC plus the median offset from all
  connected nodes. Network time is never adjusted more than 70 minutes
  from local system time, however.

It's not obvious that there aren't any problems with this way of timestamping. See the blog post Timejacking & Bitcoin and the discussion about it here.


Bitcoind listtransactions return only received transactions not showing send payment I try to get all transaction of an account using this:

listtransactions Ammadkhalid

But this is show me received transaction not send here screenshot but in php:

I believe this is because 'accounts' don't really exist, except to help you to keep track of what address receives what.

listtransactions without an account name should show you the sends, as I believe all transactions get sent with the default account, or *


Understanding how initializing the Ledger Bitcoin hardware wallet works One can find the Ledger Bitcoin source code here:
https://github.com/LedgerHQ/app-bitcoin
I am trying to understand how a Ledger app account is initialized or restored.
Can someone point me to another 'official' project, which is communicating with this Ledger firmware?
Wallets typically have user functionality to initialize or restore a wallet. I am interested in how this is mapped or delegated to the hardware device.
I am interested in the parts where APDU commands are sent to the device to initialize or restore the device.
Sorry if this question is vague, or contains factual errors.

Ledger provides a python library which also links to some limited documentation of the API: https://github.com/ledgerhq/btchip-python


How to place a sell order on Kraken that only sells when the price stops going up? I can do basic buy/sell on Kraken fine using market and limit orders.
I'd like to place a sell order that will only sell if:

the price of BTC reaches a certain minimum amount
but, if the price keeps on going up, I of course want the system to wait until the price starts to drop again, say X %, before selling.

How can I do this?

At the moment, Kraken has disabled all advanced order types - so there is nothing that can do what you're looking for on Kraken.

That said, I think the order type that you are looking for is called trailing-stop-order.
You can read more about it here, for example: https://support.bitfinex.com/hc/en-us/articles/115003506545-Trailing-Stop-Order


Why doesn't Bitcoin migrate to proof-of-stake? After reading a little bit about different consensus algorithms, I am just trying to understand why Bitcoin still uses proof-of-work. This consensus algorithm being exponentially expensive, and resource intensive, doesn't it make more sense for Bitcoin --the most expensive cryptocurrency out there-- to migrate to proof-of-stake?

Currently, Bitcoin transactions are so expensive that day-to-day transactions, like buying a cup of coffee, can be more expensive than the good/service itself in some parts of the world, which fails to deliver one of the original goals of Bitcoin. That is to be the common person's every-day money.

Why does Bitcoin stick to the proof-of-work consensus algorithm?

Proof of Stake is basically a case of having your cake and eating it, too.
PoW is a simple work-around to a coordination problem that was previously thought to be unsolvable. It sort of "cheats" by providing an economic solution to a distributed systems challenge, by introducing a real cost as a disincentive to unwanted behavior as well as using a reward system both to bootstrap itself and to incentivize security. The advantages of Bitcoin's PoW system include that the group of block authors is truly open to anyone with computational resources, that the system converges on one ground-truth because there is a real cost in producing a competing chaintip, and that it is simple enough for its security model to be well understood.
PoS is more similar to the approaches that were pursued before the publication of Bitcoin. PoS is naturally divergent as there is no real cost in staking. The "Nothing at Stake problem" allows stakers to work on multiple chaintips and only publish the next block from the chain most favorable to them. There are different ways of approaching the vastly different security model of PoS.

Source: Bram Cohen describing ETH's PoS research
For example, ETH's effort to switch to PoS has been in research since at least 2015.
The latest I've read, ETH's current PoS proposal piles multiple layers of complexity on top of the staking to achieve convergence. Stakers have to register as "Validators" of which there are a limited number, put up a sizeable collateral that can be slashed in retaliation for misbehavior, and additionally maintain frozen capital to stake in the first place. More mitigations are in place to punish validator malfunction and recover the system from such breakdowns.
Other approaches to and issues with PoS include:

Some systems introduce a central party that rubberstamps the latest block (e.g. Peercoin). A central coordinating party costs the system its censorship resistance.
It's difficult to fairly launch a PoS system since stakers have to hold funds in the system to author blocks. Many PoS systems get either started as airdrops, Initial Coin Offerings (ICOs), or a proof of burn auction.
Staking requires some representation of the private key to be online at all times, which may mean that it is easier to redirect some of the staking power (in early PoS systems it had to be the actual private key, so not only staking power but actual funds could get stolen). Not participating in staking means that your share in the monetary supply is being inflated away.
Some systems require coins to have a certain amount of confirmations before being allowed to be used for staking, so spending funds interrupts your staking revenue.
Some people expect that staking revenue will be taxed differently than mining revenue.
Some PoS systems can be gamed for profit by trying a vast number of block candidates to cause the staker to get blocks more often than their stake should qualify them for. Such an incentive may turn such PoS systems just into PoW schemes under the hood.
Some researchers argue that "by depending only on resources within the system, proof of stake cannot be used to form a distributed consensus, since it depends on the very history it is trying to form to enforce loss of value".

So, while the Ethereum Foundation keeps giving (and missing) new delivery dates for an incomplete research project, there seems to be less interest among Bitcoin contributors to discuss Rube Goldberg contraptions.
And then, beyond the general skepsis for PoS, it wouldn't be feasible to just switch to it:

"Even if there somehow was a workable solution that had desirable
properties and security proofs, it would be working under a vastly
different security model than PoW… and nobody can just decide to make
such a change without enormous community consensus for such an
invasive change."  –Pieter Wuille


What hash algorithm is used in Bitcoin Cash? I know that bitcoin uses hashcash as PoW algorithm, Ethereum uses EtHash and Litecoin uses Scrypt. But I didn't found anywhere the PoW algorithm used in BitCoin Cash, does it uses hashcash too?

BCH and BSV both use SHA256 as their POW algorithm, as does Bitcoin (BTC).


What is the value of using BitPay Card? Like many here, I'm very much interested in using Bitcoin (or any derivative thereof), but I'm not having much luck doing it locally.  I need a fix to this problem, maybe BitPay Card.

I'm very much interested in Bitcoin as a pseudonymous, peer-to-peer transaction (i.e. cash) but equally important, as a firewall against the Visa/MC increasing power in the economy, regarding both central transaction processing AND the merchant fees. Given that, what is the argument for using BitPay Card?  I don't see using it, per se, as consistent with the virtue of bitcoin, but I would be open to it, if it can be a springboard to greater adoption in using bitcoin.

The way I see it:

On one hand, using BitPay Card isn't really using bitcoin.  You need to be verified to use it and it seems to be powered by Visa.  As far as I can tell, it is no different that using the debit card that is already in my pocket.   It's not really an alternative to Visa/MC.  There is no real pseudonymity.    Most importantly, widespread use of BitPay Card may actually obviate the need to transact directly in bitcoins.
However, a widespread use of BitPay Card gives more volume/heft to the underlying bitcoin infrastructure thereby providing a more solid foundation for the more widespread adoption of bitcoin: stabilizing the value/exchange rate of bitcoin, giving comfort to merchants in using bitcoin directly, giving comfort to employee/employers to pay wages in bitcoin, etc.

Given that, I still don't know whether to sign up or not.  Is there consensus understanding among the bitcoin user community (not investor community) on the usage of BitPay Card?

It's for early adopters and those with a large percentage of their wealth in bitcoin. Since bitcoin isn't widely accepted at merchants these people use debit cards tied to bitcoin to spend their hoarded coins. It really doesn't make sense for a newcomer. In fact bitcoin rarely makes sense for newcomers as a payment method.


Seemingly random transactions on testnet I'm testing my bitcoin marketplace site using testnet. Sometimes I'll simulate a payment from a buyer to a seller. In this scenario, my site generates a payment address and the fake buyer is supposed to send money to it. But before I do anything, a mysterious payment will be sent to the address and cause the payment to be partially or fully paid.

I'm not sure if this a bug with my site or the nature of testnet. Here's one such transaction: https://live.blockcypher.com/btc-testnet/address/miX7hFUHPciQaUC2QR88BMCUaR18aH2857/

I'm not an expert on blockchain but it seems like someone sent 0.68885375 BTC and the change valued at 0.00059542 BTC ended up going to my address instead. Why does this happen? Isn't the change supposed to go back to the sender?

Testnet is generally pretty noisy, filled with strange transactions and nonsensical movements of money. I personally hold wallets responsible for 20%+ of all transactions in the block chain, and most of the UTXOs. If you want a stable environment regtest is designed for testing your tooling without the noise or needing to wait for blocks.


Where can I find the structure and layout of what exactly gets hashed by miners? I understand that a miner has a list of bitcoin transactions since the last time a a block was discovered. The first entry is the reward for who discovered the previous block. As more transactions gets added, they're appended to this list. This part is speculation, but I think there's also a nonce that the miners inject in order to produce a hash output that meets the difficulty.

Where can I find out the specifics about what exactly is hashed? I'm looking to understand the exact bytes and structure.

The data that's hashed is the block header. You can find a description of the format and layout at https://en.bitcoin.it/wiki/Block_hashing_algorithm


Is there a "MtGox Live" alternative which supports Euro? MtGox Live is a quite pretty live market depth graph.

For some reason it only shows prices in USD.

Does anyone know an equally good alternative which supports EUR instead?

MtGox Live now supports 17 currencies. Use this URL with the desired country code:

http://mtgoxlive.com/orders?currency=YOUR_DESIRED_CURRENCY_CODE

  BTC  // Bitcoin
  USD  // USA
  EUR  // Euro
  JPY  // Japan
  CAD  // Canada
  GBP  // Great Britain
  CHF  // Switzerland
  RUB  // Russia
  AUD  // Australia
  SEK  // Swedish
  DKK  // Denmark
  HKD  // Hong Kong
  PLN  // Poland
  CNY  // China
  SGD  // Singapore
  THB  // Thailand
  NZD  // New Zealand

Here is the Euro chart: http://mtgoxlive.com/orders?currency=EUR


Transaction Relay and trickling in Bitcoin If a node has 100 connections to other nodes and receives a new transaction using a getData request, it sends an inv message to it's 100 connecting peers correct?

Does it also send the inv message to the peer that it just received the transaction from as it is still one of it's connecting peers?

'Messages, in general, are flushed periodically about every
100 ms. However, transaction relaying takes place by “trickling” messages out. Bitcoin randomly selects with a probability
of 1/4 the transactions for an inv message and stalls the remaining transactions. Every neighbor gets a different set of randomly
chosen transactions, each about 1/4 of the currently available
set. Only the randomly selected “trickling node” (cf. addr
message relaying) gets all transactions immediately. The other
neighbors either get it later or already got it from another neighbor. Trickling reduces the overhead and at the same time makes
traffic analysis more difficult, in a similar manner as mixes do
in mix networks.'

I'm having a bit of difficulty understanding how trickling works in terms of transactions. I believed that the process was when a transaction occurs, the node responsible for the transaction would send INV messages to its peers and send the tx if the peers respond with getData.

If a node has 100 connections to other nodes and receives a new transaction using a getData request, it sends an inv message to it's 100 connecting peers correct?

No. It depends on what nodes have sent an inv stating that they have that transaction. When an inv is received, the node will remember what has been inv'd to them by that node so that it does not attempt to send it something it already has. At most, there will be 99 inv messages sent. Since we already know that the peer that sent us the transaction already has it, we don't send them an inv. At minimum, there will be no inv messages sent because all nodes could have already sent us an inv for the same transaction.

  Does it also send the inv message to the peer that it just received the transaction from as it is still one of it's connecting peers?

As stated above, it does not. While there is no rule the explicitly prevents this, it is sensible to not send an inv to someone who has already sent an inv to you for the same thing. This saves bandwidth costs.

  I'm having a bit of difficulty understanding how trickling works in terms of transactions.

For each peer, the node keeps a list of transactions that it is going to inv to it. It sends inv's for transactions periodically with a random delay between each inv. Transactions are selected to go into the inv message somewhat randomly and according to some metrics involving fee rate. It selects a limited number of transactions to inv.

  I believed that the process was when a transaction occurs, the node responsible for the transaction would send INV messages to its peers and send the tx if the peers respond with getData.

The node the creates a transaction treats that transaction like any other it received over the network. For every peer that node is connected to, it adds that transaction to the list of transactions that it will send to that node eventually. Then everything else is as usual. At the next time it is to send an inv message for a particular peer, it chooses transactions to inv, and the transaction it created may or may not be one of those. Once the inv is sent, the other node will respond with a getdata for the things it wants, which may or may not include the transaction it created. Then your node responds to the getdata with the transactions themselves.


List addresses associated with my wallet in a transaction With the Bitcoin Core command line, how do I list all the addresses of a particular bitcoin transaction that belong to my own wallet?

listaddressgroupings will show you all the addresses used by the wallet.


possible victim of non-spendable scam A bitcoin trader opened a blockchain wallet for me and then sent me my profit but it is non-spendable. I know they can no longer get into my account because I changed the password and I have two-step verification. And I don't see them created passphrase, that means no private key was stolen?

Can they still access to my wallet?
I'm the simlar situation as below thread, but how do I know private key was taken?
Non-spend Blockchain.com
How to unlock private key of bitcoin

Yea they can still access your wallet.

When the scammer created the wallet, they will have written down the mnemonic seed phrase for the wallet. With this seed phrase, they can recreate your wallet using some other software, since the seed phrase will allow them to derive all of the same addresses. They do not need the password to do this, and changing the password will not stop them either.

Think of it like this: you have a secret (the seed phrase) hidden in a box, and your password is the lock on the box that protects that secret. If the scammer steals the secret before you lock the box, they won’t need your password. They already have the secret!

So, the best thing to do is just never use that wallet (or seed phrase) again, and stop talking with the scammer.


How to accept donations? (I know it's a duplicate question but the other answers are old and links are not working anymore)

I need to accept BTC donations from my GitHub page, and I was wondering how to do it.

I've created an address with Bitcoin Knots to receive payments, but from what I'm seeing the address will stop working after receiving the first donation, meaning that I should create a new one for each donation.

Of course this can't be done manually, so here are my questions:

Does the address really stop working after receiving one payment?
If yes, how can I automatically generate new addresses everytime?
(bonus) Is there a trusted way to move my BTC to a PayPal account?

Addresses are intended to be used once, and there are problems with reuse, but it is usually safe to just use the same one repeatedly for donations if you don't have a way to update it easily. However, Bitcoin is still a new technology, so this may change in the future (making reuse stop working) - read the release notes of new versions before you upgrade to ensure you're not caught by surprise.

If you have a way to update the webpage automatically, there is a JSON-RPC method "getnewaddress" that you can use. However, it is very unsafe to run your Bitcoin wallet on a webserver, so be sure if you go this route that you push it from a separate, secured machine.

PayPal does not at this time support Bitcoin.


Do I need to keep all blocks when running Bitcoin Core? Do I need to keep all blocks, from block 0 up to the current one, when running Bitcoin Core, either as a full node or not? Or can I just keep the more recent blocks to save space?

Full nodes keep all blocks by default, but this is not necessary to achieve full node security. Full nodes validate the complete blockchain and enforce all consensus rules regardless of whether a full history is kept.
Keeping all blocks is a service to the network, as you'll be able to provide all blocks for synchronizing nodes or requests of thin clients.

If keeping the full blockchain is a problem, you can reduce the storage-footprint by running Bitcoin Core in pruning mode. Just add prune=<n> to your bitcoin.conf, where <n> is the amount of youngest blocks you want to keep in terms of mebibytes storage. The minimum is 550 MiB.


Metrics to Study the Bitcoin Economy I'm creating a course on the Bitcoin on Udemy that serves as both an introduction to the bitcoin and also a source to explain how mining and speculation work. I'm working on lecture three which is on the bitcoin economy and I'm wondering what metrics I should include to explain how one can understand the bitcoin economy. So far I have the following:

Distribution of Wealth
Supply and Demand
Exchanges (by trade volume)
Currencies exchanged for bitcoins
Pools (by hash volume)
Oligarchiness (the influence any one group has on the bitcoin)

It appears that blockchain has the most accessible data for neophytes. Are there any other data pools you'd recommend for people to use?

Though it might not help much with economics, if you run a node then you can also gather information on orphaned blocks, IP addresses, and unconfirmed transactions (some of which may never confirm, if insufficient transaction fee is paid or the transaction size is too big).

Gathering statistics on Bitcoin is tough, as little can be collected reliably about Bitcoin users. Other questions have looked at that issue here and here.

It's generally impossible to even prove that particular bitcoins have not been destroyed (eg the exchange that apparently lost its wallet when Amazon EC2 crashed), though in some cases proof can be given they were destroyed (where bitcoins are sent to a particular address that nobody can realistically have the private key for). I suppose in that regard it's no different to cash.

You might also be able to get some idea of publicity and levels of user interest from activity levels on bitcointalk.org, reddit.com/r/bitcoin and Google search statistics


How to estimate/get network fees via blockchain.info API? I am using blockchain.info API to send payments. but i need to know that what will I be charged by the network. So any way to get the network fee with specific amount to sent.. or how to generate it to show to user.

i need to know that what will I be charged by the network.

The network doesn't charge you, you decide what to pay the miners, and the miners determine if your transaction fee is high enough to include in the next block or not (since they get the transaction fees).

It doesn't look like Blockchain.info has an API for estimating the fee (it is an estimate, since it is primarily based on transaction volume, it varies). But, you can use another api such as earn.com to estimate a fee rate (in satoshi/B):

Get Market Fee Rate

Recommended Transaction Fees
https://bitcoinfees.earn.com/api/v1/fees/recommended

Example response:

{ "fastestFee": 40, "halfHourFee": 20, "hourFee": 10 }

fastestFee: The lowest fee (in satoshis per byte) that will currently result in the fastest transaction confirmations (usually 0 to 1 block delay).
halfHourFee: The lowest fee (in satoshis per byte) that will confirm transactions within half an hour (with 90% probability).
hourFee: The lowest fee (in satoshis per byte) that will confirm transactions within an hour (with 90% probability).

Estimate Fee

Without knowing the transaction size, you might have to guess. Something with 1 input, and 2 outputs (one for change) might be around 250B.

fee = feerate * tx_size

Make Payment

Then, you can set the fee property when you make a payment.

Making Outgoing Payments

Send bitcoin from your wallet to another bitcoin address. All transactions include a 0.0001 BTC miners fee.

All bitcoin values are in Satoshi i.e. divide by 100000000 to get the amount in BTC. The Base URL for all requests: https://blockchain.info/merchant/$guid/. $guid should be replaced with your Blockchain Wallet identifier (found on the login page).

http://localhost:3000/merchant/$guid/payment?password=$main_password&second_password=$second_password&to=$address&amount=$amount&from=$from&fee=$fee

$main_password Your Main Blockchain Wallet password
$second_password Your second Blockchain Wallet password if double encryption is enabled.
$to Recipient Bitcoin Address.
$amount Amount to send in satoshi.
$from Send from a specific Bitcoin Address (Optional)
$fee Transaction fee value in satoshi (Must be greater than default fee) (Optional)

Response: 200 OK, application/json

{ "message" : "Response Message" , "tx_hash": "Transaction Hash", "notice" : "Additional Message" }

{ "message" : "Sent 0.1 BTC to 1A8JiWcwvpY7tAopUkSnGuEYHmzGYfZPiq" , "tx_hash" : "f322d01ad784e5deeb25464a5781c3b20971c1863679ca506e702e3e33c18e9c" , "notice" : "Some funds are pending confirmation and cannot be spent yet (Value 0.001 BTC)" }


Lightning - Question about force-closures of channels and its impact on recovering funds Dear Lightning experts,

someone mentioned in context with lightning channels the following things, and I would like to ask you if this statements are true, and if yes, is this a problem in a future world where lightning becomes mainstream, how would we prevent such scenario of not returning funds`?

"The mnemonic seed will not allow you to recover funds that are off-chain in lightning channels...EVEN if the peer force-closes the Channel! And Static channel backups will not fix this..."

So question is: Why not designing it in this way:  "IF  there is a force-closure by the other party, THEN your funds are DIRECTLY automatically returned back to your wallet."?

Why in the world was the abovementioned automatic solution not in place now (or is it??)? Because of watchtowers or other stuff?

If above statement about not being able to recover... is not true, then pls elaborate kindly what the actual "return mechanism" is in such force-closure scenarios?

Thank you all

Sorry René, it seems you fell into a Bcasher trap here ;) OP phrased his question very vaguely and then proceeded to cry CENSORSHIP when you admitted there might be some truth contained in what he alluded to.

In reality, the case OP is alluding to is a very rare edge case that could ONLY occur, if the following things are ALL true:
1. You don't back up your channel state.
2. You don't give your channel to a watchtower.
3. You lose your channel state.
4. Your channel partner knows this.
5. Your channel partner has an old channel state that is more advantageous to him.
6. Your channel partner is evil.

This particular combination is easy to avoid and doesn't really occur in practice.

In a normal force-close, OF COURSE your funds are automatically returned to you.


how do i programmatically find out whether this phone has a wallet with at least a certain arbitrary amount of bitcoin in it? the use case is:
i have a bitcoin-aware app A, which would then like to trigger a bitcoin payment request to be executed by an on-phone bitcoin wallet via the BIB20/bitcoin: URL mechanism.  Rather than generating the payment request directly and immediately for an arbitrary amount of bitcoin, is there a way to in effect ask the bitcoin wallet if it has at least N bitcoins in it first?

thanks,
John from Kimbrough Software

It is not possible, by design. Like Jestin said, the wallet's balance is not the business of other apps.


Is Bitcoin a viable way to transfer money from one currency to another Is bitcoin a viable way to transfer money from one currency to another?

When I say viable, what I mean is: is it similar or lower in cost to other currency conversion services e.g. xoom.com or bank-to-bank transfers and does the benefit of the conversion rates outweigh the potential risks involved.

Most exchanges charge around 0.5% per transaction. Assuming you go both ways, that can be around 1% of your total conversion. You will also lose money to another fee when transferring coins back to fiat. A second consideration worth noting is the volatility of the coins. You may gain or lose money during the time that you are converting from one currency to another.

The risks are still up in the air. Cryptocurrency is like the wild west, and its exciting! Maybe you'll be the one to create the new cheapest currency conversion service ;)


Is Block 507570 a pure spam block? I found Block 507570.

There are only 51 transactions in this block but its size is almost maximal, there are 3,964 input adresses with exactly 0.0001 BTC.
The sender paid only 10$ for 61,602 Bytes here for example and there are 19 similar transactions in this block.
Is this an attemp to waste space of the blockchain?

looking at this particular example, there is many, many multisig tx, one after another. These multisigs require more signatures, and extend the space. Now one can try to be speculative, and say it is spam - as we don't know the real use case. The advantage would be, that you fill the block of "low level fee tx" (see here: https://core.jochen-hoenicke.de/queue/#30d), so that following tx need higher fees, which pays better off for the miner(s).

Another approach for a use case is cold storage. To reduce the risk, I separate the funds of my exchange users in a hot wallet, and a cold wallet. Every now and then the users will want to move funds around, which might create such huge tx. I haven't followed the addresses though.

A third use case could be mixers. Many people would contribute their initial bitcoins, and then mix it between many different addresses, and bring it out again... In an overall tx, with 10$ fee, you could "wash" +170 US$ of current value.


What are the minimal system requirements to run a full Bitcoin node? I want to build a low profile system running as a full Bitcoin node, i.e. just running Bitcoin Core 0.9+ and pretty much nothing else. What is the minimal system (in terms of power consumption) that would be suitable for this task? Just bitcoind will do, no interface or visual interaction needed.

I'd really prefer something where I don't need to build all the software manually.

A simple small netbook would do, I guess. But could I even use something like a Raspberry Pi? Or perhaps some other single board computer?

I assume it'll need at least 20-30 GB disk space (for OS + Bitcoin Core with entire blockchain). Is there a minimum amount of RAM I'd need for bitcoind?

Curious to hear what kind of system and OS you guys would recommend for this!

(P.S. to avoid confusion: I just mean running a full Bitcoin node, not mining)

Just some thoughts:

As of the time of writing the main net's full blockchain size is 21,670,092,800 bytes, a bit more than 20 GB, that is. So you should have way more disk space that just 20-30 GB.
A Raspberry Pi runs with an SD. SD is known for its limited rewriting capabilities (it's not a heavy duty storage solution, it will bite the dust after a while) and on top of that there's also the very important factor of the data transfer rate. SD's top model type (Class U3) maxs at 30 MB/s while a typical SATA-3 disk will max at 750 MB/s, which BTW can go as high as 2 GB/s with a SATA Express attached to a twin PCI Express 3.2 lane, but I guess this is not a low-spec computer any more. And yes, I know, you can mount an external USB HD to a R-Pi but even in this case you'll never get these speeds.
Some of the top single board computers could perform well, and I think this is the best solution for a low power-consumption full node. For example if you attach a SATA hard drive to IGEPv5 Full Version you will most probably get quite good performance at a very low cost, both of acquisition but operational as well.
A low-spec computer could deliver great results with some lightweight linux distributions, my personal favorite is Lubuntu that comes with an LX11DE UI and then bitcoin's installation would be as easy as:

Menu > Accessories > LXTerminal > $

sudo add-apt-repository ppa:bitcoin/bitcoin
sudo apt-get update
sudo apt-get install bitcoind

Edit 1: Pictures speak louder than words (as a response to Jannes's comment, so I'm attaching a few performance screenshots from a full node running in Windows that just received a new block and a couple of minutes after that, as well as an analysis of the I/O index:

Verifying incoming block:

One of the I/O spikes of the block verification at level 3 (default for all clients):

I/O analysis for the above graphs:


Will a new block be found immediately, when there are enough transactions to fill a block? I am trying understand the Bitcoin verification process.
What happens, if a new block has not been found and there are enough transactions waiting to fill the current block size limit?

Will a new block be automatically created, or will we all be waiting for the new block?

We don't have to wait until a block is full, instead blocks are created in a random process. Whenever one is found, the miners directly try finding the next one. This takes roughly ten minutes, regardless of how many transactions are waiting to be confirmed.

So, we'll all be waiting for the new block.


how to spend an utxo when the corresponding scriptsig is longer than 256 bytes? I am trying to spend an utxo sent to a p2sh address. The scriptsig (including the redeem script) is longer than 256 bytes. When the transaction is serialized there is only one byte to indicate the size of the scriptsig. How should I do? Thanks by advance.

The size is encoded as Compact size.  These can be up to 9 bytes long and encode a size of anything between zero to 18446744073709551615 bytes.

The rules are (according to serialize.h) :

/**
 * Compact Size
 * size <  253        -- 1 byte
 * size <= USHRT_MAX  -- 3 bytes  (253 + 2 bytes)
 * size <= UINT_MAX   -- 5 bytes  (254 + 4 bytes)
 * size >  UINT_MAX   -- 9 bytes  (255 + 8 bytes)
 */
inline unsigned int GetSizeOfCompactSize(uint64_t nSize)
{
    if (nSize < 253)             return sizeof(unsigned char);
    else if (nSize <= std::numeric_limits<unsigned short>::max()) return sizeof(unsigned char) + sizeof(unsigned short);
    else if (nSize <= std::numeric_limits<unsigned int>::max())  return sizeof(unsigned char) + sizeof(unsigned int);
    else                         return sizeof(unsigned char) + sizeof(uint64_t);
}

Which basically means, for any data of length L in bytes,

If L < 253, the encoding is just the value itself.  Anything between 0x00 and 0xFC.

For larger sizes, we prepend the encoding with one byte 0xFD, 0xFE or 0xFF depending on how many bytes it would take to encode it.
The sizes 253, 254 and 255 are an exception (easy to see why.  their bytes are used for the encoding itself) and are treated as a two-byte size.
The size bytes themselves are encoded in little endian.

If 253 <= L < 65535, the encoding is first the byte 0xFD, then the two bytes that make up the actual size.
Your specifc value of 256 is in this range, and will be encoded as :

FD0001

FD because it's in the second range, and 0001 is the "reverse" of 0100.

The rest of the ranges behave the same, and their ranges are shown in the code snippet.


How do nodes verify Bitcoin Transactions? I am trying to understand the role played by various nodes in the Bitcoin Network in verifying the transactions that are taking place in real time. I think that I understand the process of Transaction (using Input and Output Scripts) and how the Transaction is formed. However I am trying to correlate it with how a Transaction is Broadcasted to other nodes and then verified?

Consider an example:

if A wants to send some BTC to B, then 2 things will occur:

(a) A will form the input script of the new transaction. It will reference the output script of a previous transaction where A received some BTC (in the past). It will prove the ownership of those BTC by using its Public Key and verifying the Signature.

(b) The output script for the new transaction will be formed by A's client. It will store the hash of the BTC Address of B and enable it to spend these BTC in future.

Now, my questions are:

All these actions are performed by the Bitcoin Client of A and it does not require any interaction with the Peer to Peer Network. It has its own local copy of the Block Chain which it can use to perform the step a. So, isn't the transaction verified by the bitcoin client of A?
I am guessing that this new transaction that was created (input and output scripts formed as described above) will be broadcasted to the entire Bitcoin Network. Now, what type of verification is being performed by other nodes on this transaction?

On what basis is a Transaction accepted by the Bitcoin Network and integrated into the Block which is a part of the Block Chain?

Thanks.

Yes, but that doesn't mean that the network has accepted it.
There are rules for accepting a transaction.  Miners only include blocks that don't break the rules.  The rules include checking that the inputs are valid, that a coin isn't double-spent, that the output isn't more than the input, etc.

A miner can choose to include a transaction or not.  A miner could even choose to include a transaction that breaks the rules!  But if he does that, other miners that are following the rules won't accept his block and he won't get his mining reward.  So he has incentive to follow the rules.


How to get started with a Bitcoin wallet Where should I go to start a wallet? I have downloaded the TOR browser and got online at WEUSECOINS.COM.  Is there another site, perhaps one with more information for beginners, that I should be using?

No need for Tor at all (unless you intend to buy drugs or weapons, but in that case you're better off using cash dollars or euros).

I'd recommend to read up on Bitcoin to understand what you're doing. Then you can find an overview of wallets on bitcoin.org, but for a quick start, the fastest way to get started is:

Desktop (Windows/Mac/Linux) : Electrum or MultiBit
Android : Bitcoin Wallet by Andreas Schildbach
iOS : Bread Wallet
Windows phone : Get an Android phone instead
Web wallet, accessible anywhere : Coinpunk

These are all fairly easy to use, and don't bother you with all kinds of advanced options.


New User, New Wallet I recently purchased some bitcoins, which were sent via coinapult to my cell phone.  I received a text for the amount with a link to an online wallet (apparently not a true wallet but just an account within a larger wallet).  I would like to have my own wallet.  I’ve downloaded the bitcoin wallet program (for windows) from this website.  (bitcoin-qt) version 0.6.2-win32.  When I open this program it claims to be “synchronizing with network” a certain number of “blocks”.  In the “received  coins” tab is listed an address.  Using my coinapult via the link provided on my smartphone I sent a bitcoin to the listed address.  However I see no evidence it was received.  Do I need to wait for the synchronizing process to complete to send bitcoins to this wallet?

Using the default client (which it appears you are) transactions received while the client is online will usually appear immediately but transactions which occur while the client is offline will not appear until the block containing them is downloaded. Based on your description this appears to be what has happened, so your transaction should show up whenever that particular block downloads.

You could also try punching your address into http://blockchain.info and you should be able to see your transaction as well as what block contains it.


What would I need accounts for? I'm messing around with the bitcoind daemon and I now stumbled upon accounts. As far as I now understand, my bitcoin installation has one wallet, which contains one or more addresses. In general, you will want to use an address to receive money on only once. So for every new incoming transaction I create a new address (getnewaddress). As I list my available addresses I see that each address also has an account, which is in my installation always defined as "" (empty). In the bitcoind API calls list I see a command called setaccount.

I now wonder though, what would I need an account for? Is that something similar to tagging emails (effectively grouping them together), or does an account entail something else?

What would be common use-cases in which I would want to use accounts?

Have you read the explanation on the Bitcoin wiki directly linked from the API calls list you already linked to?

I suppose the idea could be explained as the division of your wallet into sub-wallets called accounts. You can achieve the benefits of that by explicitly keeping separate wallets (if your bitcoin client allows that).  Account issues are well explained in the wiki article I linked to. You probably do not want to use accounts as suggested there, though, for creating individual customer accounts to receive payments; see the section on account weaknesses of the same wiki article.

A hypothetical use case I could imagine would be wanting to separate your bitcoin expenses. Imagine you use your wallet for purchases relating to two different hobbies, two different donation-receiving public addresses,  and miscellaneous expenses. By creating five accounts, one for each of these, you can more easily keep track of what you spend (or receive) for each purpose, without the need to create individual wallets.


How do I move my bitcoin from mycelium to another wallet? I'd like to do this in a fee-less way.  This is the first step in claiming my BCH.  I've tried using this link

https://steemit.com/btc/@libert/step-by-step-guide-on-claiming-bitcoincash-from-mycellium-wallet-201783t112141477z

My bitcoins just never show up in the coinomi wallet.

I tried using this tutorial

How to sweep private extended key from mycellium into coinomi for bitcoin cash coins?

But the derived keys that are generated, and I've gone through at least 1000, are not for the "other addresses" that appear on my wallet.  The first in the list is my HD wallet but that has zero funds.  I have two "other addresses" with the BTC.  These don't appear. I only scanned the first 20 QR codes but searched 1000 for the prvt keys of the two addresses according to my backup.

Anyway I'll edit this if necessary I'm just trying to take this step by step.  Any help is greatly appreciated.

there should be an export function on mycelium. select the other keys on the left pane and export them. in coinomi, import them (dont sweep, that makes a transaction).

in coinomi, the import functiln appears to be under settings -> restore wallet. make sure you dont have anything of value in coinomi before restoring this way.


Can I somehow force bitcoind to do decomposition with getblock? Can I somehow force bitcoin to include the script with getblock call?

I see that here https://github.com/bitcoin/bitcoin/pull/886 and here https://bitcointalk.org/index.php?topic=89725.0 there is indicated that it is possible with '{"tx":"obj", "script":"asm"}' option, but currently that returns error from bitcoind.

By looking at the source code here

https://github.com/bitcoin/bitcoin/blob/master/src/bitcoinrps.cpp
https://github.com/bitcoin/bitcoin/blob/master/src/rpcblockchain.cpp

and comparing it to the code in the pull request in the question

https://github.com/bitcoin/bitcoin/pull/886/files

it seems like it is NOT possible in the code today. Oh well.


Transferring bitcoin from old bitcoin core wallet to electrum I have a 7 year old wallet.dat file that was created by the bitcoin-qt program (https://bitcoin.org/en/bitcoin-core/).
Downloading the blockchain takes too long and I experienced that the downloaded chain risks getting corrupted. I decided to use Electrum so I can access the wallet's contents sooner.
I tried following the steps from https://en.bitcoin.it/wiki/Transferring_coins_from_Bitcoin-Qt_to_Electrum, but I'm stuck at the step dumpprivkey, because I don't know what <your bitcoin address> means. I have installed a new bitcoin-qt version so naturally the list of receiving addresses is empty.
I have also tried another approach with dumpwallet. This yields a 250 kb file with thousands of lines and I don't know what to do with that. Surely sweeping every single private key from that file isn't feasible?
Edit: with the command listreceivedbyaddress 0 true bitcoin-qt shows all addresses that once received bitcoin. I supplied them to the dumpprivkey function in order to get the corresponding private keys. This allowed me to finish the steps as described in the wiki article.

I have a 7 year old wallet.dat file

I guess that predates HD wallets. Which I think means you'll need to sweep all private keys which have money (UTXOs) currently associated with them.
For an HD wallet I believe you can probably sweep the Extended Private Masterkey shown at  the top of the dumpwallet output.

I'm stuck at the step dumpprivkey, because I don't know what <your bitcoin address> means.

listunspent should help by giving you a list of addresses which actually have money associated with them.


How do I double spend using electrum? I have created a transaction several days ago, with a very low fee. The transaction was meant to remove dust from my wallet, so increasing the fee won't help as the transaction is very big (1.6KB), and I can't afford to spend more than a few (28 right now) satoshis per byte. Now as expected, this transaction is stuck forever.
I now want to send some of the dust somewhere else. If I understand correctly, I could just create a new transaction that uses the same (not transferred yet) bitcoins, which would then automatically invalidate the waiting transaction. How can I do this with Electrum? If I just create another transaction, it will wait for the parent to confirm.

You need to perform a replace by fee transaction

Go to preferences and activate dynamic fees if that's not already set. You can then right click on a "low fee" tx in the history and select "Child pays for parent". You then have a fee slider with "within 2 blocks" pre-selected from a dynamic fee. You will now see a preview window for the transaction. Click sign and broadcast the signed transaction and the fee is bumped.

This will only work if you have change from the transaction to your own wallet (usually the case). Otherwise you can ask the recipient to do a CPFP on the transaction. The CPFP transactions in Electrum are by itself RBF, so you can further bump the fee after doing CPFP if needed (which means you could select a lower target like 25 blocks and bump further from there if you want to save on fees).

Make sure you select a server that runs Bitcoin core (the servers usually print what they are running in the console tab) because BU won't accept RBF and will prompt an error (you can still switch then). Most Electrum servers are running core though (I'd guess ~80%+), so it'll work out most of the times.

Source


Isracoin: What hashrate should I be getting with intel core i5? I'm only getting 13 kh/s using minerd with intel i5 and the lowfeemining.org pool. Shouldn't I be getting a better hashrate?

Assuming that IsraCoin uses the Scrypt-Hashing algorithm as suggested in the comments on the question, I found this hardware overview table on Litecoin (which also uses Scrypt).

The table lists a number of Intel Core i5 processors ranging in hashrate from 12 to 55 kHash/s.
I.e. depending on what processor you have exactly and whether IsraCoin uses the same hashing scheme as LiteCoin, it is within the expected performance.


What are the differences and similarities among Paymium, Bitpay, Coinbase, etc.? Google news in recent months has turned up a story about a company in France called Paymium that has been licensed as a bank (without going into just what the company does), and another company that has moved to Atlanta, called Bitpay, which enables customers who have web sites to accept bitcoin payments.  The headlines about the latter seemed to be about the fact that they'd raised something over a half-million dollars from a small number of investors.  Google news didn't include anything about Coinbase, as far as I recall.  But a glance at websites makes it look as if they might all be in approximately the same business.

Can someone compare and contrast these companies, including, but not limited to, differences and similarities in what they do?  And are there other such companies that are notable and that I've missed here?

Paymium, operates Bitcoin-Central.net market exchange.  That exchange has partnered with a financial organization such that your EUR balance held at the exchange will be (once they go live with that) guaranteed by the government.  They will only be doing BTC/EUR when this goes live.  Currently they offer BTC/USD, BTC/GBP and BTC/EUR markets but no fiat balances are currently guaranteed.

BitPay is a payment processor for E-Commerce as well as for bricks and mortar / point-of-sale.  This allows a business to accept bitcoins for payment and the proceeds are delivered to the merchant as directed.  This could be 100% fiat (e.g., all bitcoin sales get converted to USDs immediately, or a mix, .. like 30% USD, 70% BTCs, etc.)   The currently can send payments to merchants in U.S., Mexico, Canada and several nations in Europe.

Coinbase account holders get a secure web-based bitcoin wallet, and by linking a U.S. bank account, the ability to buy/sell bitcoins directly from/to Coinbase at a USD conversion rate that is very close to the last price quoted from London based bitcoin exchange Bitstamp. Coinbase itself is not a crypto-currency exchange. Coinbase also offers bitcoin transaction processing services to merchants.

There are quite a few exchanges.  The bitcoin.it Wiki has Buying bitcoins and Selling bitcoins indexes that are fairly comprehensive as to the options available.


I'm mainly on a Windows system. What are some advantages and disadvantages of setting up Bitcoin-Qt in a Linux virtual machine? I'm on Windows. Would it be a good idea to load up Bitcoin-Qt in a virtual machine running Ubuntu? What are some disadvantages I might run into?

I was thinking it would be secure as everything is in the virtual machine, and I can easily copy that virtual machine out to another computer if it ever crashed.

I also plan to run other crypto currencies as well.

Duckx, I think you have a good idea.

Well for one thing -- using a linux VM is much better for security.
You are essentially using your windows machine for browsing the internet / email and your linux machine for only bitcoin banking.

All it takes is someone to compromise a bitcoin related website and you could be out of your bitcoin holdings.  With your wallet.dat running in a Linux VM if someone compromises your windows machine they won't be able to easily steal your wallet.dat and keylog your password, etc.

If you're not using the Linux VM for Bitcoin banking, you can have it turned off!

It's trivial to encrypt your entire linux HD.

Linux is inherently more secure out of the box than Windows, and with a few tweaks, extremely secure.

Technically though, if someone compromises your Windows machine they could gain control of your vm and get to your bitcoin assets.  This type of attack though is extremely rare and would have to be personally targeted rather than some worm looking for wallet.dat files.

Almost all major Bitcoin applications are developed on linux/osx so you will be in good shape.

As for a performance hit... you won't even notice it.  Linux doesn't take much overhead to run at all.

Finally, when you transfer the BTC to your linux machine, do not transfer the wallet.dat just create a new wallet on the VM and send your BTC/LTC whatever via the network.  This way you don't have an unsecured copy that could be stolen.


What article started the Bitcoin bubble? As I heard the Bitcoin bubble started around April 2011 due to an article on Bitcoin in some news website. What article started the Bitcoin bubble?

Press inquiries to me really picked up after the Forbes article came out in the print edition of that magazine. I think that "mainstream press" mention started the publicity avalanche that fueled the bubble, although I'm a pattern-matching monkey like everybody else so take my opinion with a big grain of salt.


How can I convert a SHA256 hash into a Bitcoin base58 private key? How can I take the output of sha256sum

sudofox@ubuntu:~$ echo -n 'Hi guys!' | sha256sum
7542fb6685f9fd8f37d56faf62f0bb4563684a51539e4b26f0840db361e0027c  -

and turn it into a Base58Check encoded private key?

I need to be able to do this with a list of SHA256 keys. Is there a script I can download, or must I spend a few weeks making it just so I can make my temporary addresses?

In response to first comment:
No, I must input a string, like "fluttershy", for example, into sha256sum and then I must encode the output of sha256sum into a base58check private key.

string -->sha256sum --> some automagic process, which is the purpose of this question --> bitcoin private key.

Update: For anyone wanting to use Grondilu's Bitcoin Bash Tools: You need to source the bitcoin.sh file after extracting it into your directory to use the functions.

source ./bitcoin.sh

Update 2 (Aug 2017): Rewrote script to go from step 1 to WIF in one go. You can just add the declaration of base58 and the encodeBase58 functions from bitcoin.sh if you want to skip the rest of the lib.

#!/bin/bash
#Tool to convert bitcoin privkeys into WIF keys
# by sudofox

source ./bitcoin.sh

KEY=$1 # first arg

# add 0x80 to beginning
EXTENDEDKEY=$(echo 80$KEY)
FIRSTHASH=$(echo -n "$EXTENDEDKEY" |xxd -r -p |sha256sum -b|awk '{print $1}')
SECONDHASH=$(echo -n "$FIRSTHASH" |xxd -r -p |sha256sum -b|awk '{print $1}')
CHECKSUM=$(echo $SECONDHASH|cut -c1-8)
FINAL=$(encodeBase58 $EXTENDEDKEY$CHECKSUM)
echo $FINAL

The usage would be

./sha256_to_privkey.sh key

where in my example (see Stephen Gornick's answer), key would be

807542FB6685F9FD8F37D56FAF62F0BB4563684A51539E4B26F0840DB361E0027CCD5C4A8E

Do the same thing for the various functions, modifying as needed. Hope this helps anyone struggling to use the tools.

What you are requesting is described as computing the Wallet Import Format for that private key:

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

Using your example:

1.) Take a private key (Below is the HEX representation of binary value)

  7542FB6685F9FD8F37D56FAF62F0BB4563684A51539E4B26F0840DB361E0027C

2.) Add a 0x80 byte in front of it

  807542FB6685F9FD8F37D56FAF62F0BB4563684A51539E4B26F0840DB361E0027C

3.) Perform SHA-256 hash on the extended key

$ echo -n '807542FB6685F9FD8F37D56FAF62F0BB4563684A51539E4B26F0840DB361E0027C' | xxd -r -p | sha256sum -b

  7DE4708EB23AB611371BB778FC0C8BDE80394AB2D8704D7129FB5771E2F1730D

4.) Perform SHA-256 hash on result of SHA-256 hash

$ echo -n '7DE4708EB23AB611371BB778FC0C8BDE80394AB2D8704D7129FB5771E2F1730D' | xxd -r -p | sha256sum -b

  CD5C4A8E03DFBB0E3AA021C2D74A9EAA43CE4C9CB1B20FC88729A7A5834141CA

5.) Take the first 4 bytes of the second SHA-256 hash, this is the checksum

  CD5C4A8E

6.) Add the 4 checksum bytes from point 5 at the end of the extended key from point 2

  807542FB6685F9FD8F37D56FAF62F0BB4563684A51539E4B26F0840DB361E0027CCD5C4A8E

7.) Convert the result from a byte string into Base58 to get it into the Base58Check format. This is also known as the Wallet Import Format

(Converted from point 6 to base58 using https://bitcointools.appspot.com, or using encodeBase58 from https://github.com/grondilu/bitcoin-bash-tools)

  5JhvsapkHeHjy2FiUQYwXh1d74evuMd3rGcKGnifCdFR5G8e6nH


HD Wallets Difference between a CKDpub and CKDpriv from the path notation I' m still trying to grasp the conventions used in HD wallets, so I have a couple of questions:

What's the difference between CKDpub and CKDpriv from the path notation.
What I know is the path  just uses h or ' to denote difference between hardened and non-hardened dervivations but I don't see the difference between a CKDpub and CKDpriv by just seeing the path.
From this Ethereum standard derivation node /m/44'/60'/0'/0/0 ,how can someone get the extended public key and derive other public from that extended public key respecting those conventions.
f(parentExtendedPubKey, index ) = childPubKey --> address. How is this achieved and how can  a private key that stayed in the HD wallet can later be used to unlock or spend those funds sent to that address generated through the parent public key ?

What's the difference between CKDpub and CKDpriv from the path notation

1.

CKDpub (public key child key derivation)

Derives a child pubkey with given extended pubkey (pubkey & chaincode) and child index. Only works for non-hardened derivation.

CKDpriv (private key child key derivation)

Derives a child private key with given extended privatekey (privkey & chaincode) and child index.

The keypath does not distinguish between private- and public-keys, so on that level there is no difference between CKDpub/CKDpriv.

Although, as you mentioned, to derive a hardened key – even if you only want to derive the public key – you need the corresponding extended private key.

Examples:

you can derive the extended pubkey at m/1 if you have the  extended pubkey m
You can't derive the pubkey at m/1' with the extended pubkey m
You can derive the pubkey (and the privkey) at m/1' with the extended privatekey m

  From this Ethereum standard derivation node /m/44'/60'/0'/0/0 ,how can someone get the extended public key and derive other public from that extended public key respecting those conventions.

You need the xpriv (extended private key) to derive /m/44'/60'/0', but further public child keys (like /m/44'/60'/0'/0 and /m/44'/60'/0'/0/0) can be derived with the xpub (extended public key at /m/44'/60'/0').

  f(parentExtendedPubKey, index ) = childPubKey --> address. How is this achieved and how can a private key that stayed in the HD wallet can later be used to unlock or spend those funds sent to that address generated through the parent public key ?

Deriving a child public key – regardless if you have use the xpub or xpriv – result in the same public key. Just be aware that only the xpriv can derive hardened childkeys.

Assume you have derived the pubkey at m/10 with the xpub at m, you can later derive the according priv-key at m/10 with the xpriv at m.

Further thoughts

BIP44 was designed for hardware wallets and or cold storage.
Ideally you should not mix non hardened key derivation (CKDpub) with the possibility to export child private keys. If you leak a xpub and a single child private key, you reveal all your keys.


Block 566687 nonce with extranonce, how to interpret? This could apply to any block, but I was checking this one out found by Slushpool.

I've looked this up in Mastering Bitcoin and here on StackExchange, but the best I can get so far is: the coinbase tx is a script, where the first byte says "push three bytes on the stack", which turns out to be 9fa508 in hexadecimal.  Reversing the byte order to 08a59f gives the block number (566687 decimal).

This is where I get stuck. The book says the next few bytes are used to encode the extra nonce.

Then it gets a bit more detailed: "Eight bytes of extra nonce, plus the 4 bytes of "standard" nonce allow miners to explore a total 2^96 (8 followed by 28 zeros) possibilities per second without having to modify the timestamp." p. 266 Chapter 10 in the latest edition of Mastering Bitcoin.

I can't find any code examples to try and find the nonce for a block using the extra nonce, rather than the usual examples that go to a maximum 32-bit unsigned integer as the nonce.

Is it a concatenation of nonce + extranonce, simply 41678782744206783853?  (With  4167878274 the nonce, then the additional 8 bytes interpreted as a large little-endian integer?)

I've also seen it's apparently a push of a timestamp then another push of N bytes for the extranonce, but it's getting hard to find anything to actually test.

I can't just write something like this in Python:

 header = ( struct.pack("<L", version_) + prev_block.decode('hex')[::-1] +
      merkle_root.decode('hex')[::-1] + struct.pack("<LLQ", timetamp_, bits, nonce))

The nonce is way too big in this case to pack with Q of course.

What is the correct way to validate recent blocks interpreting the nonce and extra nonce?  Subtracting a little from the given nonce, so a loop only goes for say a few thousand times, adding +1 up to the nonce, then finding a block hash lower than the target doesn't seem to work with the extra nonce, although it does with older blocks that have a nonce that fits within an unsigned 32-bit integer.

The real nonce a much larger number, isn't it?  If it is, where is it, and how is it put together with the apparent nonce given on blockchain explorers so that a simple script can validate a recent Bitcoin block?

Thanks!

I can't find any code examples to try and find the nonce for a block using the extra nonce, rather than the usual examples that go to a maximum 32-bit unsigned integer as the nonce.

The nonce for the block remains unchanged. Since the extra nonce is part of the coinbase transaction, it modifies the merkle root, which is part of the block header. Thus, for each extra nonce, you get a unique merkle root, which then allows you to try the full range of regular nonces with that merkle root.

You do not need to concatenate or otherwise mix the two nonces in any form - the extra nonce's purpose is simply to alter the merkle root.

To validate a block with an extra nonce, you don't need to do anything special. Just build the transaction merkle tree, verify the merkle root matches the root in the block header, then hash the header and check it agains the target. It's the same process for blocks with and without the extra nonce.


Is split possible in bitcoins (like in stocks)? I see that bitcoin is reaching 1000USD. If bitcoin becomes widely accepted currency, then we'll have to deal with decimal numbers like 0.00023 for onions etc. This can be cumbersome and might become a blocker for bitcoin adoption.

To overcome this problem, some people already started using mBTC (milli bitcoin) as units. But this is confusing. The better solution would be to split the bitcoins (like we do in stocks). With this approach, when BTC reaches 1000USD, we can split 1BTC into 1000BTC and it would be easy to manage the currency.

So my question is, does the bitcoin algorithm supports splitting of bitcoin?

No. And that would be even more confusing. You would have to synchronize the split, and for historical prices you would need to know if they were old BTC or BTC after first split, second split etc... Just use mBTC, uBTC, satoshi, or even fractions of the smallest unit if need be.


Why, when sending BTC to my pruned node's generated wallet, the BTC aren't showing there? :) I'm starting development on a PHP project that involves creating a Bitcoin server, creating and managing wallets, etc.

I've created a selfish-node (550 MiB of the blockchain) on Ubuntu 14 with bitcoind and bitcoin-cli and it is live according to https://bitnodes.21.co/ => response: (162.243.145.144:8333 /Satoshi:0.14.2/)

My bitcoin.conf is as follows

prune=550
maxconnections=10
maxuploadtarget=10
rpcuser=fakeusername
rpcpassword=fakepassword
daemon=1
keypool=10000

and bitcoin-cli getinfo outputs

root@b:~/.bitcoin# bitcoin-cli getinfo
{
  "version": 140200,
  "protocolversion": 70015,
  "walletversion": 130000,
  "balance": 0.00000000,
  "blocks": 367670,
  "timeoffset": -1,
  "connections": 8,
  "proxy": "",
  "difficulty": 52278304845.59168,
  "testnet": false,
  "keypoololdest": 1505160918,
  "keypoolsize": 10000,
  "paytxfee": 0.00000000,
  "relayfee": 0.00001000,
  "errors": ""
}

I've created a wallet via bitcoin-cli on this node: 17Jn1VYpwknwjuVxLMYvqc8iHJ6QsP8xDo and have sent this address 0.00000547 bitcoin as a test from an Electrum wallet of mine.

The tx: ee65b8201e0e26827430b34872f6dd961f318e0c1e4c5266a6bcf8a8fa22a2ce

According to the blockchain, it has over 10 confirmations at this point (it is confirmed).

But when I execute commands to verify this from within my server, it does not show any such transaction and it does not show that I have received any funds.

root@b:~/.bitcoin# bitcoin-cli getreceivedbyaddress 17Jn1VYpwknwjuVxLMYvqc8iHJ6QsP8xDo

Outputs

0.00000000

and

root@b:~/.bitcoin# bitcoin-cli gettransaction ee65b8201e0e26827430b34872f6dd961f318e0c1e4c5266a6bcf8a8fa22a2ce

Outputs

error code: -5
error message:
Invalid or non-wallet transaction id

Is this because I am not running a full node? Can anyone shed some light on this?

Your node isn't synced with the blockchain yet.

 "blocks": 367670,

Your node has downloaded and verified 367670 blocks.  According to https://blockchain.info/ there are currently 484790 blocks in the blockchain.  Your node will not have an up-to-date view of the transaction register until it has downloaded and processed all of them.  At that time, your transaction should become visible to your node.


How to make transaction in btc rpc Probably been asked a lot, but I'm unable to find answer. I wanted to ask, how to do I send from btc rpc to another address inside or outside rpc.

I been looking at these calls sendtoaddress , createrawtransaction , signrawtransaction and sendrawtransaction and I'm a bit clueless...

On side of that, how do I get amount of fee I need to pay when doing transaction.

The simplest thing for you is to just use sendtoaddress. This will use your bitcoind's wallet to select which coins to use, construct the transaction, sign it, and send it. Everything happens internally to the wallet so all you need is to have some Bitcoin in your wallet, an address to send to, and the amount you want to send.

The syntax for sendtoaddress is

sendtoaddress <address> <amount>

where <address> is the address you are sending to and <amount> is the amount.


How many days the verification could take? I first time bought a smaller piece of bitcoin and wanted to do some shopping from that, but I still my wallet contains only not confirmed bitcoins.

My questions are:

Why the confirmation takes so long?
I saw a page that shows the total count of unconfirmed transactions, its increasing, not decreasing - could it mean that my transaction will never be confirmed?
How does the confirmation work?

Thanks!

Because you have paid a lower fee than others, so your transaction is put last. Your coins will return to your wallet, but can take up to 4-6 days before that happens. Hope it helps you.


Who issues bitcoins and how? I can't find information on who actually issues the bitcoins. I understand that miners generate new bitcoins but what party is responsible for issuance?

the protocol allows a miner when he creates a block to send himself 25 BTC which do not have a proper source (input).

that's how those 25 BTC are created, they're bitcoins that come from nowhere.


After Setting up my Bitcoin core Server, I need to create wallets for each of my client on a website may be thousands After Setting up my Bitcoin core Server, I need to create wallets for each of my client on a website may be thousands.
How can i generate wallets on per user basis that if bitcoin core does not allow me.

I need to create wallets for each of my client on a website may be thousands

There are several ways to generate addresses in bulk. Using Bitcoin Core exclusively you can create individual wallets with the createwallet command in the RPC and then create new address with getnewaddress although you will have to do this programmatically as there is no built-in functionality for the creation of X number of addresses at a time.

A faster alternative outside of Bitcoin Core would be to use a vanity address generator such as VanityGen. The initial intention of VanityGen was to allow for the creation of unique/custom addresses with specified prefixed characters otherwise known as "vanity" addresses. Luckily this tool has an array of command-line parameters useful for bulk addresses generation too. VanityGen utilizes your graphics card (OpenCL-compatible) making it significantly more powerful than the standard CPU generation found in the Bitcoin Core client. Similarly, it works both online and offline.

Using the 64-bit Windows binaries provided on the project's GitHub, I can use the following command-line options:

vanitygen64 -o key_pairs.txt -v -k 1

-o Specifies file to write key pair to (Pattern, Address, PrivateKey)

-v Makes output verbose (Provides Pattern, PublicKey, PrivateKey, Address in stdout)

-k Continues search after finding a match (run infinitely until exited)

1 This is what the vanity generator will look for as a prefix.

All of the generated addresses and their private keys will be listed in the output file (key_pairs.txt in the example). You can parse this file and assign each of your "clients" a private and public key pair as well as the address that goes along with it.


What happened to my coins, hacked? I'm new to bitcoin, downloaded the bitcoin.org client, encrypted my wallet, and purchase a few bitcoins (5.25), for learning purposes.  But now my coins seem to have disappeared to an unknown address.

You can follow the chain here:
http://blockchain.info/address/14Z4C6Bu2DXHcaRkoqKDhY72BE74PRA8Vt

Here's what I did:

Purchased 5.25 BTC from online exchange
Sent .01 BTC to my Armory address for a test
Sent .095 BTC back
Sent .01 BTC back to my Armory address again
Sent .095 BTC back again

And in my bitcoin client it showed all these transaction correctly (screenshot below).  Today I ran it and it seems my blockchain files are corrupted so I start downloading the blockchain again. Meanwhile I check blockchain.info on my address and find that actually when I did my first transaction, (.01BTC) at the same time the entire balance of my wallet was sent to some mystery address (16oc97Z4RRRanyt8bB3RT84XSemZL7KXkg and coins have since been transferred again to another account which would appear to rule out the idea of me randomly sending them to the wrong address).

I swear I checked the blockchain details religiously for the week after my initial transaction and this transaction was never there!

Where did this transaction come from?  It never showed up in my bitcoin client, even though I kept it synced for weeks after my initial transaction.  Were these coins somehow hacked?

I was using my own private computer at all times (and never any online wallets etc...)  I have various antivirus/firewalls installed.

Don't worry, you've not been hacked. This is just one of your wallet's change addresses:

https://en.bitcoin.it/wiki/Change
How does change work in a bitcoin transaction?
Why does Bitcoin send the "change" to a different address?


What kind of random numbers source does getnewaddress in Bitcoin Core API (bitcoind) uses? Is it an internal PRNG? Is it fed  from /dev/random or /dev/urandom? How secure is it? If I have a hardware (TRNG) plugged in feeding my /dev/random will this source of entropy get used by bitcoind?

As others mentioned Bitcoin core uses OpenSSL random sources.

This means that it uses any random source available, like:

the operation system, i.e. interrupts
random sources of the CPU or the chip set
dedicated hardware for entropy generation

So in order to make sure your hardware random generator works with Bitcoin you must make sure it works with OpenSSL.


How to find one private key from the list of 15 million public keys for the sake of experimentation? Recently found a list of compressed public keys. The total number of 15 000 000 public keys.
Practical for all compressed public keys Balance: 0.000100 BTC

I do not set malicious goals. All just for the sake of interest and sports experiment I would like to try to find at least one private key from this entire list?
For the most part, I want to understand, apart from "Brute Force" (which will not help), are there more promising methods and ways of finding a private key?

Is it possible to search for a private key? Or are there some mathematical attacks, even when you know a large number of public keys?

That's how crypto works where public key cannot retrieve private key. If you were able to retrieve the private key with public key then bitcoin would be at high risk.

The only way is to Brute Force (Nearly impossible) or Social Engineering (Only if you know who owns the key) or Somewhere that stores leaked private key otherwise, you just can't obtain it.


In the end, will there be only one? Highlander pun aside, will one cryptocurrency vastly dominate the rest in the future?  Will it be a handful?  Will each government come up with their own cryptocurrency?

The reason Bitcoin has value is because it is resistant to censorship (e.g., prohibiting transactions related to illicit purchases) and corruption (e.g., an authoritative source changing the rules). It does this thanks to the innovation known as proof-of-work.

But this proof-of-work means Bitcoin is vulnerable to attack from a party or cartel with more than 50% of the hashing capacity. The cost to perform the attack is enormous, and there is no economic incentive to do so — thus the likelihood that will occur is significantly discounted.

Litecoin also is a proof-of-work based crypto currency. The primary difference between Bitcoin and Litecoin is the algorithm used for the proof-of-work (Bitcoin uses SHA256, and Litecoin uses Scrypt) and the amount of hashing capacity needed to be successful with a 51% attack.

With an arsenal of maybe ten thousand GPUs and a distributed denial-of-service (DDoS) attack against the LItecoin pools, a 51% attack against Litecoin is likely to technically be a success. But such an attack isn’t performed to prove a point, it is performed to gain a profit. And whether there is the potential to profit from a Litecoin 51% attack depends on a few factors. Exchanges that don’t require identity would be the targets. This means the attacker won’t be double spending litecoins against the exchanges like Mt. Gox, Kraken, etc., but instead Vircurex, Cryptsy, etc, Today there likely isn’t the possibility to suddenly convert several million dollars worth of litecoins into bitcoins and then withdraw those bitcoins. Those exchanges simply don’t have that level of liquidity. So today there is no economic incentive to perform a 51% attack against Litecoin. But if an attacker were to perform a 51% attack, Litecoin is a lot more vulnerable than Bitcoin – due to the inability to acquire 2,300 Th/s of SHA256 hashing capacity, nonetheless the cost — something that would cost, using equipment prices offered today, over ten million dollars.

That doesn’t mean Litecoin or some other alt can’t reach a similar level as Bitcoin as far as there being no economic incentive for a 51% attack. And if an alt were to reach that level, Litecoin would probably be it. But Litecoin is vulnerable for a period of time until it gets there. And that’s why, other than the first-mover-advantage that Bitcoin has, that an alt is not simply a lesser-valued coin than Bitcoin. They simply have differences and the market recognizes these differences and that shows up in the price.

Now if wanting to choose between a Feathercoin and Litecoin, for instance, and the risk of a 51% is even more pronounced. And that’s why a Feathercoin, for example, has had (and likely will continue to have) successful 51% attacks performed against it. So we probably don’t need to worry about a thousand alts, each being considered suitable alternatives to Bitcoin.

The wildcard is the potential that a proof-of-stake based alt coin, which doesn’t have mining based on proof-of-work, would be an acceptable solution. But a proof-of-stake coin essentially changes the risk from an attacker acquiring hashing capacity to an attacker acquiring a sufficient quantity of coins themselves. Again, — such an attack brings no economic benefit, at least not today. But the market seems to agree that proof-of-work architecture is the right approach for a decentralized digital currency.

And of all proof-of-work based digital currencies, bitcoin's protection from a 51% today trumps all others. And that’s enough to prefer Bitcoin over the alternatives. At least, that’s the case today.

[Source: http://btctheory.com/2013/10/20/bitcoin-alt-coins-and-free-money-theory/comment-page-1/#comment-15 ]


Name.id encoded in blockchain I've been working on a tool to decode hex messages inserted into OP_RETURN.  Whilst looking at strings in the blockchain I keep coming across user names with the format id:name.id.

If you run strings over a blk*.dat file you will find strings such as:

id:muneebmajeed.id

id:andrewlawrence.id

id:nicholas_studholmewilson.id

id:jorisheijne.id

id:algoventures.id

id:bgardineer4.id

I can't figure out what they are?

As mentioned in the above comment, these are Blockstack IDs.

https://blockstack.org/blog/browser-public-alpha


what to do if I found a fraudulent wallet? I was scammed via bitcoin and the scammers' wallet is currently holding 98 stolen bitcoins (from several victims). the amount is unspent in the current wallet . is there anything to do? I went to the police but can I report the wallet some ware ? Write to anyone ? Find out in what exchange does the wallet sit?
This is the hash of the fraud wallet : 115906bc83bebc7511a2c497961e87e7fc3783b2ae5645e4605f9adad4571847

is there anything to do?

No

I went to the police but can I report the wallet [somewhere] ?

You can

Write to anyone ?

Whatever you want

Find out in what exchange does the wallet sit?

Impossible with your skills
Transaction: 115906bc83bebc7511a2c497961e87e7fc3783b2ae5645e4605f9adad4571847
Address: 36Nq2uXqCaXu5kTN3mZtRubqHiVsYbQsMN


Where can I trade my altcoins? I'm looking for an exchange to trade my altcoins against each other to take advantage of the volatility. Any suggestions for altcoin exchanges?

Crypto Street is a platform launched to do exactly this. We support BTC, LTC and FTC for now. We plan to add additional altcoins as they prove viable or in some way substantial.

(DISCLAIMER: I am one of the owners of the site).


Have 10 of 12 of my mnemonic along with the BTC address, how can i automate recovery? So I wrote down my mnemonic on a piece of paper and somehow the last 2 words got ripped off and I cannot find where it went. I do have 10 out of the 12 word phrase still (along with the order, they are 1-10), along with the last address that coins were sent to on it.

My question, is there a way to automate finding the last 2 words? I found various examples online for finding 1 out of 12 but nothing about situations with 2 out of 12 missing. Given that theres only 2048 words in the dictionary for it and each word in the mnemonic can only use certain ones from this dictionary, I'd presume this wouldn't be too difficult of a task. Preferably, Id like to find a way to not only generate the phrases but also check them for a balance in the blockchain if possible. Anyone know how I should go about this given what I have?

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

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

Seed Savior / mnemonic-recovery (courtesy of MCCCS)

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

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


Bitcoind Performance for production usage Lets say we have one instance of bitcoind running on the production server. And our exchange software/application interacts with it using RPC callbacks for:

address generation
withdrawal
notifications

Now the question is
what is the capacity of bitcoind?
What would be the limit for number of transactions per minute?
What is bitcoind performance?
Any suggestions?

address generation

Make sure your using HD here (A wallet created with bitcoin core 0.13 will be HD).

Address generation is pretty fast, make sure your using a large keypool –keypool=5000 in the conf-file maybe.
Also, you can pre-generate addresses and stored them in a cache-database.
But be aware, if an attacker manages to compromise that cache-database, he can probably redirect funds.

Address generation can also be done outside of bitcoin-core. Check BIP32 (HD Wallets) and maybe have a look at public key derivation. If you need performance, have a look at libbtc (C library with CLI, can derive addresses very fast).

  withdrawal

At this point, you very likely are stepping into the realm of "hot wallets". Make sure your building a secure environment.
This step involves ECDSA (signing of inputs) which requires the according private keys.
Signing is not very fast (depends on your requirement). But you can perfectly measure this with a regtest setup (sign 1000 transactions and measure performance).

  notifications

Don't use -walletnotify (it forks a process = very slow).
Try to use ZMQ (you might need to add some extra code for the wallet).


Is "inherited" replace-by-fee signaling implemented as described in BIP125? From Bip125:

  Explicit signaling: A transaction is considered to have opted in to
  allowing replacement of itself if any of its inputs have an nSequence
  number less than (0xffffffff - 1).

  Inherited signaling: Transactions
  that don't explicitly signal replaceability are replaceable under this
  policy for as long as any one of their ancestors signals
  replaceability and remains unconfirmed.

However, it looks to me like only "explicit" signaling is tested. See this part of the BIP125 pull request that was merged into Bitcoin Core:

https://github.com/bitcoin/bitcoin/pull/6871/files#diff-7ec3c68a81efff79b6ca22ac1f1eabbaR841

It's very clear that incoming TXs are checked for conflicts (double spends) and if the conflicting TX does not explicitly signal RBF with its input sequence, then the new TX is rejected.

If implicit signaling were implemented, I would expect to see a recursive check for the conflicting TX's mempool ancestors, or check some kind of flag stored with the TX metadata.

OR, is the text of the BIP just describing what happens to descendants of replaced transactions, in that they are evicted when their explicitly-signaling ancestor is replaced.

The answer to this question is: no, inherited signaling is not currently implemented in Bitcoin Core as described in BIP 125.
In May 2021, Antoine Riard discovered the missing implementation could be exploited in the context of the Lightning Network "pinning attacks against second-stage HTLCs" as well as other contexts:
https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2021-May/018893.html


Is there a cold storage option for altcoins? Is it possible to create a paper wallet for altcoins offline and send your altcoins there?

I can only buy altcoins from online exchanges like bitrexx but I feel it's really risky to keep large amounts of altcoins there because it can be hacked, or my funds could be seized for some reason. Is it even possible to store altcoins safely in a cold storage or in a hardware wallet? I have tried to look for options but I haven't found anything. I wonder how people store their altcoins. Do they just keep altcoins worth thousands of dollars on exchange sites and pray that nothing bad happens?

Each Altcoin will have their own respective wallet software. For example, Bitcoin has bitcoin-qt and SYS coin for example has blockmarket-qt. Each coin will have to have it's own wallet. Some wallets support multiple types of coins (Electrum).


Are multibit HD (or other no web wallet) and Blockchain.info wallet words compatible? Well the title says it. I tried to enter blockchain.info seed words into multibit, but it doesn't seem to be working.

So what I'm trying to do is to have multibit (or other) alternative of my blockchain.info wallet so I can send bitcoins when blockchain.info is down.

The wallet Blockchain.info offers to users is not an deterministic wallet, as such the mnemonic they present is not compatible with any other piece of software other than their own. If you have your wallet.aes.json file downloaded it can be opened with a very old version of MultiBit Classic, other than that you will have to wait for the centralized wallet to be available again before you can send money.