HD / Deterministic Wallets and public key I understand the basic concept of generating an unlimited number of public key addresses from a master public key. What I won't understand is how to get the wallet balance. Do I have to query unspent outputs for every public key in the wallet that I have generated?

Is it possible to iterate through the addresses in the utxo and determine whether they are within the public set of addresses that could be generated by the wallet?

If I hand the server a public key and it generates more on my behalf, how do I know which addresses received coin? It seems like there must be a way to determine if an address is spendable by the master key pair.

Any ideas? Seems that you would have to check the entire utxo set somehow. Much appreciated.

Clients that use an HD wallet generate a fairly large number of the keys in advance (e.g. Armory does 100 by default). When it scans the blockchain for relevant transactions, it checks for transactions to all of the keys that it's generated so far.

Typically, you do transactions off the next address in the list (there's a certain order to it, and it's easier to just generate the next one than 100 next ones). Let's say your client has generated the first 100 keys, and someone sends money to the 150th address in your list. You'd have to wait for the client to decide to generate the 150th key (probably because you hit your 50th key used and it pregenerated out to 150), or tell your client to generate out to the 150th key, and then rescan the blockchain, in order to know that you received money there.

  It seems like there must be a way to determine if an address is spendable by the master key pair.

Not necessarily: you can generate a very long series of addresses (2^32, if I'm reading BIP 0032 right) from a master key pair, but doing so would take a substantial amount of time. I'm not sure if there's a theoretical way to do what you're asking (without actually calculating all of them), but in practice it's clear that you just generate the set of addresses you think will be useful in the near future, and go from there.


How would segwit help bitcoin services like, blockstream profit, and miners to loose? Segwit in the current form,

How would it affect miners except, asicboost?

How would blockstream (other than miners) kind of companies benefit from it, in such a way that miners can't?

I'm looking for a technical answer, and please avoid opinion based answers.

Disclaimer: I'm a Blockstream co-founder and the primary author of the SegWit proposal.

I believe SegWit benefits everyone in the Bitcoin ecosystem. It solves several long-standing problems that hurt future evolution and scalability:

Transaction malleability complicates multi-transaction contracts
Lack of script versions makes introduction of new opcodes complicated
O(n^2) signature hashing makes worst-case block validation unnecessarily costly
Lack of input amounts in signature hashing complicates hardware wallet design.

As a side effect, it also gives a moderate capacity increase without forcing the whole ecosystem to adopt new consensus rules, and improves the incentives for UTXO growth going forward.

More information about the benefits can be found here

Of course there are costs as well. They are mostly related to the size of the change. However, it has been a community effort with dozens of contributors that reviewed and tested the changes over the course of several months, with deployments in several test networks, later the Bitcoin testnet, and eventually adopted in Litecoin. A large part of the ecosystem has indicated support or readiness for SegWit.

More information about the costs can be found here.

So to answer your questions:

  How would it affect miners except, asicboost?

I don't know. Given the level of industry support, I don't know why they would be opposed to it except for political reasons. The only thing I can come up with is that a sudden increase in capacity may temporarily reduce fee income, but that is expected for any kind of capacity increase.

  How would blockstream (other than miners) kind of companies benefit from it, in such a way that miners can't?

Blockstream has no direct business interest in seeing SegWit activated. All its own products (including Elements and Liquid) have had SegWit-like systems built in for years, and work fine with or without it being available on the main chain. Blockstream pays me and others to work on Bitcoin development, including SegWit and Lightning, because it believes that is valuable to the ecosystem we all depend on.

There are other companies that may have a direct interest in SegWit. This includes wallet providers who pay transaction fees for their users, especially multisig wallets, as the benefits of SegWit are largest for those. Hardware wallet creators may like SegWit because it simplifies proving the amount of fee paid to the hardware. Companies whose business model relies on payment channels (which doesn't include Blockstream) may depend on SegWit activating in the near future.


Zeros in blk00*.dat files When writing a blockchain parser I've found that some blk00*.dat files contain zeros instead of blocks. (I got zero where magic bytes were expected, looked in the file and saw there are more zeros.)

What does it mean? Do I have corrupted chain? How do I fix my parser, so it would interpret the file correctly?

zero instead of magic bytes means the end of bictoin block data. just skip the rest of file and follow to next blk-file

by the way. it is better to assemble blk-files for future parsing with old clients (I use 0.8.5) because they put blocks in right order


How long does it take for an exchange to send me bitcoins? I'm not sure I understand all of the bitcoin storage options

I know there are bitcoin addresses and bitcoin wallets

what is the relationship of an address to a wallet? is a wallet mandatory and a given when talking about any bitcoin storage option?

if I had an account at a bitcoin exchange, how could I quickly move those coins from the exchange to the same wallet that I am using to dump the coins I mine?

I might not be asking the right questions, because I am not sure about the relationship between the various storage options of bitcoins (wallet, exchanges)

I would like to understand this

If you have the private key that relates to an address, then you can use that to instantly make transactions with bitcoins that are stored against that address.

However, most exchanges and online wallets provide you with a unique address without providing you with the private key for it. This is probably because they consolidate the bitcoins sent to all their addresses into a single address for the exchange, which helps them reduce transaction fees and also allows them to operate with a fractional reserve system.

In the case of a 3rd party controlling your bitcoins, you are at their mercy when it comes to the timeframe of the transaction.

There are some online wallet services that allow you to have the private key for your bitcoins, which gives you the ability to import the private key to your own client and spend your bitcoins. In that case, you have a good level of control over your bitcoins.

The relationship between addresses and a wallet: one wallet can hold many addresses, and can even hold bitcoins against hidden addresses that have received "change" from a previous transaction.


Merged Mining Disadvantages What are the disadvantages of merged mining? I'm very interested in p2pool and since I have to "run my own server" I've been considering enabling merged mining.

Besides the obvious administration overhead and learning (which I chalk up to being a hobby), what disadvantages are there? I wouldn't be reducing my BTC hashrate would I?

The disadvantage of merged mining is the additional coin daemons you have to run in the background. They all use disk space, memory, cpu cycles and bandwidth. A more annoying issue is that most of them are no longer maintained and have bugs. You may find that they crash frequently - at least namecoind does.


Is it sometime advantageous to split a transaction into multiple smaller ones? When I updated Bitcoin Wallet on my Android device, it automatically created a new address and transfered all my funds from my old address to it due to the recently found security issue in Android's random number generator.

However, it didn't do it with a single transaction. Instead it did two transactions, so I had to pay the transaction fee (0.0001) two times.

Did it perhaps split it into two smaller transactions to keep the size down (only a guess) for the sake of the network? Or is a smaller transaction processed faster? Or was this necessary for completely emptying the old address? Or was my old address fragmented after multiple transactions to and from it in its history (if that is even a thing/possible)?

My questions above are only speculation. And my real question is: is it sometime advantageous to do two (or more transactions) to the same destination instead of a single, big one?

It can be advantageous to split transactions in order not to draw from different addresses in one transaction, because that would announce that both addresses belonged to the same Wallet (for the privacy paranoid user).

The priority of a transaction is reduced by having more source addresses, however it is on the other hand increased by sending a larger amount. Coins that have been held for a longer time also increase the priority.

I don't see why it would have been necessary to transact in this fashion and I think the overall size for the network would be the same (2*250B or 1*500B).

I would assume that you had two different addresses holding coin that were each emptied each in one transaction.


How is the exchange rate for Bitcoin established? I noticed that there are exchange rates for Bitcoin to other given currencies. How are these rates established?

You have people that have BTC or currency already in their accounts.
Those people can claim: "I will buy/sell X amount of Bitcoins for Y amount of currency". If you divide one by the other, you have the exchange rate for that particular transaction.
If a buy and sell transaction overlap, they are executed and removed from the system.
After all such transactions are removed, you have a gap between the exchange rate at which people want to buy Bitcoins, and that at which people want to sell Bitcoins.
Average the closest buy-sell pair of transactions and you have the exchange rate, halfway between those two, or the price of the last trade may be used. In both cases, it's only an estimate of the price that the next trade will take place at.


Bitcoin-Qt - backing up unencrypted wallet then encrypting it If I back up unencrypted wallet.dat somewhere safe (TrueCrypt volume) and then encrypt the wallet by Settings / Encrypt Wallet, will my backup still be useful? I think the message after encrypting the wallet said something about other unencrypted backups being useless as soon as encrypted wallet starts to be used - how could that be possible at all, I don't believe that claim and I hope it's not true :/

Besides storing your current private keys, bitcoin wallet file also contains some pool of unused private keys. When encrypting wallet, this pool is flushed.

If you make some transaction using new (encrypted) wallet then change is sent to one of addresses from the pool, which is not present in old (unencrypted) wallet.

For example, you had 1BTC incoming transaction and spend 0.1BTC, then remaining 0.9BTC will be send to a change address. Then old (unencrypted) wallet will not be able to use this 0.9BTC, and they will be lost. But if you haven't done any transactions involving your coins, the old wallet will work.


Integrating Bitcoin payment methods to a UK Opencart store? I really want to integrate Bitcoin into my girlfriend's web store, but have found that they are either too expensive per transaction for international payments (bips.me - $7.50), have a huge minimum withdrawal threshold for international bank accounts (bitpay - $1,000) or simply don't work with international bank accounts at all (coinbase)

Is there any payment module I've overlooked that will work with Opencart, and will pay in £GBP to a UK bank account?

Thanks

Have you considered https://spectrocoin.com/en/merchant/integration/plugins.html there is also live technical support if needed.


Does it make sense to create cryptocurrency based totally on go programming language? The question is straightforward. Would such implementation be practical from performance prespective? or C/C++ and JAVA are the gold standart?

I don't know how well it performs, but here is a full node implementation of Bitcoin in go-lang that you could investigate: https://github.com/btcsuite/btcd


What does a Bitcoin lightning private key look like? I know bitcoin private keys start with a 5... But how does a lightning bitcoin private key look like? Say I wanted to printed it out as a paper wallet.

Elliptic curve private keys are just scalar integer values between 1 and n (The order of G). These can be encoded by any means, but usually they are just represented as 256-bit integers with whatever endianness the platform uses. If interpreted as an array of bytes, it is simply a 32 byte sequence.

The WIF (Wallet Import Format) of Bitcoin takes the 32 byte sequence, prepends a version byte, then takes the double-SHA256 to generate a checksum. The first 4 bytes of the checksum are appended to the version and private key bytes to make a sequence of 37 byte in total. This is then Base58Check encoded to produce the textual representation of private keys you're familiar with. The reason they all begin with 5 is because of the version byte.

There is no specification for the storage or import/export format of private keys in any of the lightning specifications and it is left up to implementers to decide how to store them, or how to or export them, if at all. You can use the same WIF format if you want, as Lightning uses the same curve as Bitcoin for its signing and key exchange.

Private keys are used for two different purposes in Lightning. The Lightning node itself has a single, fixed private key, which is used both to identify the node (by its respective public key), and to sign messages proving that they indeed originated from that node. It is also used to perform an authenticated key exchange when connecting to peers to prevent MitM attacks.

The other private keys used in Lightning are entries of a bitcoin wallet, used to sign transactions regarding the channel states, which are standard bitcoin transaction outputs.

However, just knowing the private key for a particular channel is insufficient to spend from that channel, as they are 2-of-2 multisig outputs, and both parties need to sign off the transaction to spend it. You therefore need to have knowledge of a spending transaction and a signature from the other party for that transaction in addition to your own private key for the channel.

It is clearly not much use to just export these private key on their own - you would need a more detailed format which contains all of the necessary parts to reconstruct the current state of the channel at minimum. In practice, you should have a record of all previous channel states too, so that you are able to construct a justice transaction if the other party attempts to broadcast an expired channel state, unless you've delegated this role to a watchtower, who should have a record.


Why do I get this error when I try to install CGMiner on my RaspberryPi? I am going crazy trying to install CGminer on my RaspberryPi (I use Raspbian) to mine Scrypt currency

I downloaded it and when I perform:

sudo ./configure

finally I get the following error message:

------------------------------------------------------------------------
cgminer 3.7.2
------------------------------------------------------------------------

Configuration Options Summary:

  libcurl(GBT+getwork).: Enabled: -lcurl
  curses.TUI...........: FOUND: -lncurses
  scrypt...............: Disabled
  OpenCL...............: Detection overrided. GPU mining support DISABLED
configure: error: No mining configured in

Why? And why it say to me that scrypt is disabled?

What is the problem? How can I fix it?

Might as well give this old question an answer.

cgminer 3.7.2 (which was obsolete even when this question was asked) required scrypt to be enabled as a compile-time option with ./configure --enable-scrypt.  The asker evidently did not enable it, which is why it does not work.

It appears that current versions of cgminer have removed scrypt support altogether.

As Hồ Tuấn Kiệt points out, a Raspberry Pi would be hopelessly underpowered for CPU mining of any kind, so this would be a really ineffective idea even if it worked.

The asker probably got this idea because there is lots of discussion on the Internet about using the Raspberry Pi for mining.  However, most people use it in a very different way: not to do the mining itself, but as a controller for ASIC mining devices (typically for Bitcoin and other SHA256 coins, not scrypt).  It is well suited to the latter task, since controlling ASIC miners requires very little in the way of CPU performance; just the ability to run a minimal operating system with network access, and some simple software to fetch work from the network and feed it to the ASICs.  The Raspberry Pi is certainly capable of that task, and it is cheap and uses little electricity of its own.  But it isn't suitable for actually mining with its own CPU or GPU.


would universal use of arbitrage bot stabilize the market? If each bitcoin exchange ran a bitcoin-arbitrage bot (let's say the same one)themselves, would that quickly eliminate the spread, and therefore the opportunity for arbitrage?

Yes, and I recommend researching market making algorithms.

The problem is that verification and confirmation times are high, so the spreads or at least trade fees will remain wide until that problem is fixed.

Yes, it's by design, but it's an economic problem, and wide spreads are the economic result.


Chain Code from Ledger Nano S The question is basically in the title. Can I (or it is possible to) extract the chain code from a ledger nano s device? It doesn't have to be the Master Chain Code. Any of them will do.

Yes. You can get the public key, chaincode, and address for any derivation path.

If you use the btchip-python library, you can use the getWalletPublicKey() method to retrieve a dictionary containing all three of those things.


Is there a way to sign a transaction with BTC or any Altcoin without a computer using only pen and paper? Was wondering if this is possible to do. Lets say Satoshi Nakamoto ended up  prison in a foreign country and he was only able to communicate with the outside world by writing letters using only a pen and paper and being able to send it anywhere in the world. How can he sign a Bitcoin/Altcoin transaction using only pen and paper when he has memorized the following:

A brain wallet address.
Private Key

Now he would have to create a transaction and then sign it. And for him to broadcast the transaction, he would send it to someone while keeping his coins safe aswell. How can this be done using only pencil and paper?

He cannot for a bunch of reasons:

He has no idea what the unspent transaction hashes are (not memorized).
He does not have a good way to know where he's sending the coins.
In order to actually sign the transaction, Satoshi would need to do ECC math on the SECP256K1 curve, which he hasn't memorized.

Supposing that he's given an unsigned transaction to sign and he somehow has memorized the parameters of the SECP256K1 curve, it would be possible, but it's likely to take him a very long time to sign a single transaction. Point doubling alone is 14 operations of 256 bit numbers using Jacobian coordinates. For signing anything, you usually need to double the generator point 256 times.

Basically, he can if given all these numbers, but it's likely not (A) secure since he'll leave have the paper around which has evidence of his private key which he needs in order to sign and (B) efficient in any sense of the word since it's very likely he'll make mistakes and a single mistake will render the signature invalid.


Please explain network propagation with unconfirmed transactions (blockchain.info) I am wondering if someone could explain why two transactions have different network propagation values... and what does it even mean considering they are both unconfirmed transactions.
Do the transactions propagate through the nodes without being confirmed?

See below:

https://blockchain.info/tx/aec00216dfad6100638580bdc17a52d62e9c5687d9a981aaa2ece769d1f305c3

https://blockchain.info/tx/bda711e375d32b70b9fe65f4e4ceba041c6d2bdcfdaa03c5cfaff02de5445539

A number of my transactions are still unconfirmed after 10 hours of waiting.
All transactions included a fee.
I am trying to work out what has happened to them and what this whole network propagation thing means.

Network propagation is the number of nodes (computers running a bitcoin client) that have heard about your transaction.

Confirmations is how many blocks have included your transaction and how many blocks have linked onto that block.  1 confirmation means your transaction was included in a block, 2 confirmations means that another block linked onto that first one, and so on.

Until a transaction has been included in a block, it isn't considered to have really happened, regardless of how many nodes have heard about it.

Propagation needs to happen before a confirmation can occur, as a mining node needs to be aware of the transaction to include it in a block.

As of this moment, both of your transactions you linked are now showing as having 1 confirmation after being included in block 228337.

As for why it took so long to get a confirmation (468 minutes for the first one), no real idea.  Might be something regarding some miners dislike for satshoidice.  For example, the Eligius pool is configured to exclude any Satoshidice transactions from their blocks, as they view them as spam.


How to buy bitcoins anonymously I'm studying the Bitcoin system and I'm wondering if there's a way to anonymously buy Bitcoin.
Is it possible to charge a wallet (e.g. with a credit card, PayPal account, by person, by snail mail, etc.), without being traceable?
Let's suppose I don't trust any website/person...

The best way to do it is in person, with cash. Most other methods are traceable. Provided you don't live in the middle of nowhere, it's pretty easy to find at least someone nearby who's willing to buy, and if you're serious about anonymity that extra travel distance is probably a minor issue.


Is quickbitcoins.net reputable? Mailed in cash with postal envelope. Website started acknowledging receipt via postal delivery 3 weeks since. Blockchain within 3 hours of "caught up". Yet no bitcoins.

Is it a scam?

Cash amount was small, should not pose problem. Was what you call "pilot test" and had bitcoins arrived promptly would be followed with larger purchase.

I used quickbitcoins.net successfully 4 times. They are gone now. The 800 number is disconnected and their e-mail address returns nothing. Try to find the http: website on Explorer or on tor and neither can find it! Site no longer exists! If you send coins to them without checking you will loose your money!


BTC on Mycelium to Bitcoin Gold? I have some BTC on my Mycelium (Android) wallet and I was wondering if it's possible to now access (hopefully) my Bitcoin Gold. It seems I can't get the normal private keys off of Mycelium, but I have my 12 word seed at hand.

Are there any wallets compatible with Mycelium's 12 word seed that will allow my to access the Bitcoin Gold?

Do not use your seed! It will compromise your whole wallet.
Export your current account's private key in settings->export on an account.
Before using this private key anywhere. Add a new account and send your Bitcoin to this new account in Mycelium. Now you can use the exported private key to claim your Bitcoin gold.
However where you can do this is still unknown to me. Apparently Bitcoin Gold will provide guides for all wallets including Mycelium.


In the NXT register alias dialog pop up, what is the DEADLINE text field for? What is the deadline text field for in NXT register alias?

The deadline field is the amount of time in minutes/blocks (1440, or one day being the default) for the transaction to complete. If it is not completed in that time period you receive a "refund" from the network and the alias will not be registered to you.

A common mistake is to set the deadline to 10, or an even lower number reducing the odds of your transaction going through.


How can one estimate the difficulty change? I understand that the difficulty is growing and think that it should be possible to estimate how quickly that happens. I would like to analyze the previous difficulty progression and feel that I then should be able to predict the change in difficulty for the next year.

Are there already calculators that predict the change in difficulty? Where can I find a chart that compares the Bitcoin price to the difficulty progression?

You cannot predict the change in difficulty because that is a function of a number of factors that are completely unknowable.

For example, the difficulty changes because a large number of mining pools suddenly appear and have very powerful ASICs and a lot of them. How would you ever be able to "predict" this happening?

Another example is the opposite case, that the technology has reached it's absolute maximum and there are no new chips yet invented that could give performance boost. Although new miners enter the market, this does not fundamentally change the rate at which the new blocks are discovered, because fundamentally the chips being used are no more powerful.

How on earth would you be able to determine that this has happened or is occurring?

At best any calculator would be guessing.


How would one go about creating a new alt-coin? I'm looking to create an alt-coin for a club I'm a part of.  All the members of the club will be mining this currency - and we will use it for trade between members. It will also be a learning experience for everyone.

What is the fastest way for me to create this new alt-coin - and assuming everyone will be GPU mining - what would be the best alt-currency to base it off of (or would it be better to base it off of the original bitcoin)?

What programming skills would we need to re-use existing code?

Thanks for your help!

CC

Try looking at these pages:

First, a "Complete Guide on How to Create a New Alt Coin" which, as the name says is a fairly step-by-step guide on how to create a new alt-coin.

Secondly, another thread started by someone who asked essentially the same question as yours: "How do you create an altcoin?"

The discussion which follows is a bunch of people discovering for themselves how to do it. Note that I haven't read through the entire thread (it's 15 pages long as of this posting), so I'm not sure if they ever successfully make an alt-coin or if they give up somewhere along the way. But it's an interesting read to see them figure things out and discover things together as a group.

And finally, A Psuedo [sic] Guide on how to Build an AltCoin, which doesn't go into as much detail as the Complete Guide linked above. In fact, it mostly just links to other threads on bitcointalk.org. That said, it may link to some information that answers some questions left from the other links.


How are unconfirmed transactions divided into different blocks? According to https://bitcointalk.org/index.php?topic=216938.0 one transaction can only be contained in one block. If I understand correctly, miners can freely decide what transaction they include in their block and what they don't.

Why is it that multiple miners concurrently deciding what block to build on, and what transactions to include, produce blocks without any duplicate transactions? Is there a reservation list of transactions to be confirmed and miners that will include them?

When a miner (call him Pete) learns that a new block (call it X) has been mined by someone else, he will normally update the header of the block he is trying to mine, so that it lists X as the previous block.  (That way, Pete is now trying to build on top of X, rather than trying to replace it.)  At the same time, Pete will note which transactions were included in block X, and remove them from his "memory pool" of unconfirmed transactions that he was planning to include in the block he was trying to mine.  He will rebuild a Merkle tree with the remaining transactions he wishes to include, and update his block headers to match.

In this way, when Pete does succeed in mining a block, it won't contain any transactions that have been contained in previously mined blocks.


synchronizing block headers When I opened the bitcoin client, I found that it was "synchronizing block headers". Does this mean that the client first downloads block headers and then downloads block bodies? What kind of file does the header of the downloaded block is stored in?

Yes, downloading and validating the headers first has several advantages

You know in advance that the chain you're downloading blocks for is in fact the most-work chain (= the one you would ultimately end up accepting, assuming it is valid). This means you don't waste time on potential forks that have been resolved.
Since you know what blocks you will be downloading, and which peers have them, you can parallellize the download (spreading the download over multiple peers).

In Bitcoin Core, the block headers are stored in the blocks/index/ directory in the datadir, as a LevelDB database.


Multibit HD only sees one peer Multibit HD is only connecting with one peer.  This issue randomly started a few weeks ago.  Initially, I had to keep restoring my wallet to a previous date since my balance kept reverting to uncomfirmed. Annoying but it was a work around, until it only started connecting with one peer.  Restoring the wallet does not resolve this issue.

Bitcoin Core works just fine.  Ports 8330 and 8333 are open.  The issue happens both on, and off, a vpn.

Any thoughts on how to troubleshoot this issue, or at least get my coins out?

Thanks!

I had the same issue when I had Bitcoin Core running.  Shutting down Bitcoin Core and restarting Multibit fixed the issue.

I'm guessing the issue was that Bitcoin Core had exclusive access to port 8333.  If you are not running Bitcoin Core, check for other software that might use that port.


Which precautions should a newbie like me do when exporting keys from an Bitcoin Core wallet to an Electrum wallet I have an Bitcoin QT v0.8.5-beta wallet (downloaded in 2013) which it seems that I now have sucsessfully upgraded to the latest Bitcoin Core wallet. The  Bitcoin QT wallet did not disappear with the upgrade, and now I also got the Bitcoin Core Testnet wallet that automatically followed the Bitcoin Core wallet upgrade.

About 1/15 of the blockchain is now downloadet in the wallets, and I bought half a bitcoin in 2013 that I do not have catched in in my wallet yet. So I plan to download an Electrum wallet, and then import the private keys from the Bitcoin Core wallet, to the Electrum wallet, so I faster can get my half an bitcoin.

The Core wallet has now, for some hours, reindexed blocs on disc, so I think I should wait until that is ready.

My Bitcoin Core wallet is encrypted with a password, So should I decrypt the wallet before exporting the keys? The problem then is then that I can not find a place in the  Bitcoin Core wallet to quit the password, but only change the password.

And is it a problem that I do not have catched in the whole blockchain yet to the Core wallet before exporting the keys?

Should I export the keys from the Core wallet, or should I import the keys from the Electrum wallet, and where in the right wallet do I find the option?

Other problems a Newbie like me can stumble upon at this project?

Before you begin any of this, I recommend you backup your .dat files just in case something goes wrong.

Your wallet.dat file is located at %APPDATA%\Bitcoin\wallet.dat. Make a copy somewhere safe until this operation is complete.

You're going to want to export your private keys from Bitcoin QT and sweep your private keys in Electrum and you should be golden!

The process of dumping your private keys require you open a console (Bitcoin QT -> help -> debug window -> console), unlock your wallet (walletpassphrase "your walletpassphrase here" 600), and type the command dumpprivkey [your Bitcoin address here]. You can then lock your wallet with walletlock.

With your private keys saved now, you can sweep them with Electrum by opening the sweep menu (Wallet menu -> Private Keys -> Sweep), entering your private keys while leaving the 'Address' field unchanged, and executing the dialogue.

Enjoy your new light-weight bitcoin client.


Lightning Invoice QR-Code minimum size/display resolution? what would be the minimum screen size to display lightning invoices as a qr-code?

For the Raspberry Pi Zero I found these displays:

128x128 pixel LCD display (1.44 inch)
200x200 pixel e-paper/e-Ink display (1.54 inch)
128x64 pixel OLED display (0.96 inch)

I saw the examples in BOLT#11 and know that it depends on the input type and error correction setting when creating the qr-code.

Would the qr-code be readable if every black dot of the qr-code would be respresented with only one dot? Or do I need for example 4 dots, resulting in a 32x32 qr-code? Would that be enough for lightning invoices? Is it possible to convert the lightning invoice in all uppercase for generating the qr-code in alphanumeric mode which only uses 5.5 bits per character instead of 8?

With the Google Charts API it is possible to generate QR-Codes, this link generates a QR-Code with 128x128 pixel with the first example invoice from BOLT#11 and an error correction of M (allows recovery of up to 15% data loss): https://chart.googleapis.com/chart?cht=qr&chl=lnbc1pvjluezpp5qqqsyqcyq5rqwzqfqqqsyqcyq5rqwzqfqqqsyqcyq5rqwzqfqypqdpl2pkx2ctnv5sxxmmwwd5kgetjypeh2ursdae8g6twvus8g6rfwvs8qun0dfjkxaq8rkx3yf5tcsyz3d73gafnh3cax9rn449d9p5uxz9ezhhypd0elx87sjle52x86fux2ypatgddc6k63n7erqz25le42c4u4ecky03ylcqca784w&chs=128x128&chld=M|0

First of all yes it is possible to convert all characters to uppercase a trick some users of lightning already use.

If you look in the lightning rfc you can see that the length of an invoice can become quite large as the discriptions, routing hints and fallback addresses are not fixed I think there is not even an upper limit defined. For example this test invoice has 439 characters.

  lnbc20m1pvjluezpp5qqqsyqcyq5rqwzqfqqqsyqcyq5rqwzqfqqqsyqcyq5rqwzqfqypqhp58yjmdan79s6qqdhdzgynm4zwqd5d7xmw5fk98klysy043l2ahrqsfpp3qjmp7lwpagxun9pygexvgpjdc4jdj85fr9yq20q82gphp2nflc7jtzrcazrra7wwgzxqc8u7754cdlpfrmccae92qgzqvzq2ps8pqqqqqqpqqqqq9qqqvpeuqafqxu92d8lr6fvg0r5gv0heeeqgcrqlnm6jhphu9y00rrhy4grqszsvpcgpy9qqqqqqgqqqqq7qqzqj9n4evl6mr5aj9f58zp6fyjzup6ywn3x6sk8akg5v4tgn2q8g4fhx05wf6juaxu9760yp46454gpg5mtzgerlzezqcqvjnhjh8z3g2qqdhhwkj

QR Codes themselves come at different versions which define how much data can be stored in them depending on how many pixels are used.

What I can't tell u if one pixel of a display would be sufficient. I guess even with error correction this would not be enough. For example the RaspiBlitz uses a 320 * 480 display


What if some attacker forks blockchain from height 1 with a constant difficulty 1? I've been reading Satoshi's paper recently. There's one thing I cannot think through.

That is because the target will limit the block production speed to 2016 blocks per two weeks on average no matter how high the hashrate gets. What if the attacker forks the blockchain from height 1 with a constant difficulty 1 and produces exactly 2016 blocks per two weeks (just in timestamps, not in real time). I think it will be very easy with such low difficulty to catch up current blockchain's length, and eventually surpass. According to the longest blockchain concensus, will the fake blockchain replace the current one?

I would be grateful if someone could clear up my confusion.

The accepted blockchain is the one with the most cumulative difficulty (i.e. the one which requires the most work to produce), not the longest. Nodes will not even accept a chain which has less than some minimum work required, set in the code, to stop such an attack from happening on newly synchronizing nodes who are not aware of the main chain.


Is it possible to detect if flag -txindex is enabled using RPC? Using JSONRPC, how do I detect if a node has -txindex enabled?

You can use the getindexinfo RPC call to list (and get the status of) all the available indexes since version 0.21 (currently in rc3).
On my local bitcoind with (only) txindex enabled, here is the output:
$ bitcoin-cli getindexinfo
{
  "txindex": {
    "synced": true,
    "best_block_height": 660887
  }
}


Where is coinbase transaction after a hacker successfully performs >50% attack? Here is the scenario:

 Honest nodes build one block from Block_1.

 Hacker nodes privately build four blocks from Block_1 and broadcast these malicious blocks.

Now, where is the honest node's coinbase transaction (25 BTC + Transaction Fee). Is it included in the hacker's malicious blocks?

In Satoshi's white paper, he mentioned:

  If a greedy attacker is able to assemble more CPU power than all the
  honest nodes, he would have to choose between using it to defraud
  people by stealing back his payments, or using it to generate new coins

I think a hack with more than 50% power could do BOTH, stealing back his payments and generate new coins. Why am I wrong?

You're not wrong.

A miner with more than 51% of the network's mining power can build the longest chain by himself, thus reaping all block rewards and dictating which transactions make it into the longest blockchain, allowing him to doublespend at will. Also see: What can an attacker with 51% of hash power do?

There can only be one valid block at each height, so when the attacker broadcasts his longer chain, it replaces the blocks of the honest node exclusively up to the common ancestor.
The mining reward from the honest blocks which are now not part of this longest chain will be treated as if they had never been found, as they do not represent valid blocks in the longest chain.

However, the malicious node's contrarian position will slow down the number of blocks found to a respective amount due to the reduced mining power supporting the longest chain (assuming he is trying to catch-up).

By playing selfishly, he will be in control short-term, still get only 51% of the rewards (at least until the difficulty reset), and shake the trust in Bitcoin, thus eroding the value of his bitcoins.

By playing cooperatively, he would gain 51% of the blocks and increase trust in the system, thus making his bitcoins more valuable.


Bitcoin Core has some confusing UI text I'm trying to localize following UI texts of Bitcoin Core, but I cannot understand them:

  Cannot upgrade a non HD split wallet without upgrading to support pre split keypool. Please use -upgradewallet=169900 or -upgradewallet with no version specified.

What's "non HD split wallet"? What's "pre split keypool"?

  Warning: Private keys detected in wallet {%s} with disabled private keys

What's "disabled private key"?

What's "non HD split wallet"? What's "pre split keypool"?

Bitcoin Core uses something called HD chain split for generating private keys. This means that it derives private keys using two different derivation paths to distinguish between addresses that the wallet gives out and change addresses (also known as internal addresses). This split also means that there are two different keypools.

However the initial implementation of HD wallets in Bitcoin Core did not use HD chain split hence such wallets are non HD split wallets.

Furthermore, non HD split wallets and non-HD wallets had only one keypool from which all addresses (including change) were retrieved from. When upgrading such wallets, they need to be upgraded to a specific version that allows upgrading the unified keypool to the split keypool. This results in those wallets having a third keypool called the pre-split keypool. This keypool contains all of the keys from the original unified keypool and lets that run out of keys before the split keypool is used.

  What's "disabled private key"?

Wallets can be created such that they will not have any private keys and are not allowed to contain private keys. Such wallets thus have private keys disabled. (this string should really say "with private keys disabled" not "with disabled private keys").


Bitstamp: What type of order to place to buy BTC when the price drops to a certain value? I am sure this is a simple question but I am having trouble with figuring out the type of order to place on Bitstamp.

Say the price is currently $1100 but I want to buy only if the price drops to $1000, what type of order would I place? I thought this was a "Stop" order, but the Bitstamp UI asks me to specify the amount to buy in USD if the price rises to my given value. I am worried that if I enter $1000 and place this order, my order will instantly kick in because the price is already above $1000.

I figured this out. A "Limit" order is what I wanted to do.

A limit buy order will trigger if the price hits the target or lower. A caveat for anyone unfamiliar like I was: the order won't necessarily be fulfilled at the price your specify, rather it will become a market order which will execute at the next best available price.


MPOS won't show miners I'm trying to setup private mining pool, took some time to go around lots of stuff but eventually I got stuck.

I have: a miner (locally), pushpool (ext server #1), MPOS - frontend (ext server #2) and a wallet (locally).

The miner CAN see pushpool, pushpool CAN connect to the wallet however MPOS shows there's no miners whatsoever.

I'm not using that stratum-mining but as I heard, it's optional

cgminer was reporting that some block was found and as far as I understand it takes information about current block/diff from the wallet. If miner connects to pushpoold then the link between miner-pushpool-wallet must be appropriate, right?

Thus I have no idea why mpos reports no active miners, JSON result for current stats is {"pool_name":"","hashrate":0,"workers":0,"shares_this_round":0,"last_block":null,"network_hashrate":43631019858}

I just ran into the same issue, although mine was a syntax error...Also you didn't specify what coin your mining. Different settings for different coins. Pushpool is responsible for inserting the share info into the SQL database. You need to add the following lines to your pushpool config in the database area:

        "sharelog" : true,

        "stmt.pwdb" :
          "SELECT password FROM pool_worker WHERE username = ?",

        "stmt.sharelog" :
         "INSERT INTO shares (rem_host, username, our_result, upstream_result, reason, solution) VALUES (?, ?, ?, ?, ?, ?)"

Sharelog must be true, not "true"(my syntax error that took 24 hours of hunting.) You need to add the "stmt.sharelog" entry and pushpool will insert the correct data. The MPOS or front end will pick it up instantly. The database table "shares" has 2 additional columns called difficulty and time. Don't worry about them. Difficulty has a default of 0 and time will insert the current timestamp as default.

As for Stratum, the coin daemon must support getblocktemplate. I'm mining BBQ/BQC coin and it is not implemented yet. I am stuck using long poll and I'm getting alot of stales. Need to optimize for the coin your mining. It is working and I hope that pooler will release his fork of bbqcoind on github. He added getblocktemplate and it's working great at bbqpool.net. Happy mining!


Bitcon transaction verify I'm trying to understand verifying Bitcoin transaction but I can't find this part anywhere. Summary, the process before forming blocks. My questions is:

1) When I send transaction, who validates it ? Here I think, who can check and found that I haven't got enough money in my wallet. Example; I send 100 BTC but I have only 50.
The problem is bigger because in my prior transactions, refund come back on "new" wallet and who can trace all my wallet to sum how much I have in that situation. I don't speak here on double spending. I understand that part.

2) Can one transaction go by mistake in two blocks, and who prevents this ?

1) When i send transaction who validate it ? Here I think, who can check and found that I haven't got enough money in my wallet. Example; I send 100 BTC but I have only 50.

All full nodes validate every single block and transaction they receive. Once a node validates each block and transaction, the block or transaction is forwarded to the nodes that it is connected.

A number of things are checked to ensure that a transaction is legitimate. One of the things checked is the sum of the outputs being spent (i.e. the inputs) is greater than or equal to the sum of the outputs being created. It does this by looking up the outputs that are being spent. Presumably the transactions that those outputs were a part of has already been validated and the node remembers that it determined that transaction to be valid. So when it sees your invalid transaction, it will immediately see that the sum of the outputs being created is greater than the sum of the outputs being spent, which means it is invalid. Your transaction will then be marked invalid and rejected.

  2) Can one transaction go by mistake in two blocks, and who prevent this ?

No, a transaction cannot go in two blocks. This is prevented by full nodes which validate every single block and transaction they receive.


How is Bitcoin truly decentralized? Whenever Bitcoins are discussed, one generally reads how "Bitcoins are decentralized. No company nor state controls them". My question is, how is this statement true when you read about how Bitcoin Clients find each other.

Reading from here How do Bitcoin clients find each other? we find out that Bitcoin clients use a number of ways to find other Bitcoin clients. To summarize those methods can be:

List of previous connections
DNS seeds which points to host names
(Abandoned) IRC server

So with that in mind, how are these methods decentralized? I understand how method one is, but method one can not act always act as the default method per new connections.

When you look at method 2 and 3, I question primarily the decentralized nature of a host name, as someone has to pay for the registration of said domain name and the ICANN organization is responsible for such registration. While method 3, someone has to host a server. Someone is paying for or owns the hardware and is therefore not decentralized.

The only methods I can think of that are truly decentralized is

List of previous connections (As currently implemented)
IP/Port scan for other Bitcoin clients. (Attempt to initiate a handshake to identify other clients. I understand this would be incredibly slow but seems purely decentralized to me)

Can anyone shed light how the actual methods do ensure Bitcoin is decentralized? My only other thought is the "spec" of Bitcoin is decentralized and the implementation of the clients themselves happen to not be.

For ease of use, there has to be one or more automatic peer discovery mechanisms. You have listed some of them.

There is also the -addnode command line option to bitcoind that allows the user to connect to specific node(s).

These mechanisms are specific to the current implementation of Bitcoin. The Bitcoin protocol does not specify any particular peer discovery mechanism. This allows the discovery mechanism to evolve over time, and for the truly paranoid, also allows manual peer specification.


Can I move my BTC back into an exchange and still collect BTG? I'm new to all this, I exported my private key from my wallet (Exodus) but I don't know how any of this works.  I'm just confused on how the private key works, wont the key be invalid if my BTC amount changes or if I trade away?  I also heard there isn't replay protection on BTG yet.

Coinomi doesn't support BTG yet like they said they would, where can I collect my BTG?

Thanks for any detailed advice.

The private key is just a series of 256 ones and zeros. That unique combination identifies your wallet, and the chance of someone else getting that combination is 2^256, which is very very small. Your private key is used to generate public keys, which are bitcoin addresses, and which will hold some amount of bitcoin.

If BTG splits off from BTC, then they will continue with their own chain after the specified split point, say block nr 491,591. Once split, all of the bitcoin addresses which held bitcoin during block nr 491,591 are are treated as bitcoin gold addresses. Meanwhile, the same addresses hold bitcoin for the original chain, which then diverges.

If you hold a private key that holds addresses which in total hold 23 bitcoin, then you also hold 23 bitcoin gold.

To address your question: if you move the coins from the addresses managed by your private key to an exchange, you are effectively moving them to a private key held by the exchange. If the exchange doesn't support BTG, you won't be able to touch the bitcoin gold account, since you don't have the private key to access them (the exchange does). If the exchange does support Bitcoin Gold, then you are probably offered a way to trade with them.

Note that if the exchange poorly implements trading, they could cause you to lose funds because there is no replay protection. If you hold the coins on your private key, you can try to move the bitcoin gold coins to an exchange, but you would most likely have to make sure of the replay protection yourself (which is non-trivial at best).


Why haven't a large number of cryptocurrencies copied Primecoin's mining algorithm? According to my understanding, generating an ever-growing list of prime numbers benefits mathematics and society in some mysterious way.  Given this, why have more recently created proof-of-work focused coins largely ignored Primecoin's mining algorithm in favor of Bitcoin's, which yields no epiphenomenal benefits?

One of the most important functions of mining is to secure the network, meaning that a user can be reasonably sure that their transactions are immutably recorded in the chain. With this in mind, it becomes very important that the game theory of mining incentivizes the miners to remain in consensus, and behave in the expected, 'honest' way.

In a simplified sense, this means that the cost of 'behaving well' (ie the way users want miners to behave, staying in consensus and securing the blockchain) must be less than the cost of 'behaving badly' (ie causing forks, withholding blocks, reorgs, etc). Likewise, the benefits of behaving well should outweigh the benefits of behaving badly.

  why have more recently created proof-of-work focused coins largely ignored Primecoin's mining algorithm in favor of Bitcoin's, which yields no epiphenomenal benefits?

There is simple answer: if the hardware and algorithm used for mining provide external benefit, then that hardware will have value outside of it's use as a cryptocurrency miner. Thus, if a miner behaves badly and attacks the chain, their hardware will still have value, even if the chain dies. This lowers the cost of behaving badly, compared to a cryptocurrency which uses an otherwise useless mining algorithm. The net result is that the blockchain has a lower security guarantee, because the miners are not as invested in maintaining the chain.

Currently, we see that Bitcoin miners are spending huge amounts of energy to secure the network. The naïve understanding is that this is wasteful, the nuanced understanding is that Bitcoin itself benefits humankind in ways that make this cost worth it.

For more information related to this, see this question.


Withdraw and deposit in cryptocurrency exchange website In an exchange website we just book trades in our database and just when user want to withdraw his BTC balance we make a real transaction in bitcoin network for him. Consider a scenario that a user deposits 2 BTC and after some trades he now owns 5 BTC. His public address balance is 2 BTC and server must send 5 BTC to user's address. So server need to do more than one transaction: 2 BTC from his own deposit address and the rest 3 BTC from another address that server manages. In this scenario we must pay fee for at least 2 transaction. We usually in withdrawal take fee just for one transaction from user. The problem is now server must pay the other fees?
What is the solution for this problem?

In BTC scenario I want to use blockchain.com's wallet app api. As I understood, we can have lots of publuic address corresponding to one extended public key of wallet. So we assign each user to a different public address in time of deposit. In time of withdraw, we can pay from blockchain's wallet to withdraw address of user. Am I right about this approach?
I can generate new address of blockchain wallet with "http://localhost:3000/merchant/$guid/new_address" url. But this url just generte BTC address. How an I generate new address for ethereum and bitcoin cash in block chain.com api?

Is it possible to use such this solution for ethereum, litecoin and ...

If not, how can I manage the problem of many users deposits and withdraw in an exchange site?

Excuse me for number of questions

Thank you in advance

So server need to do more than one transaction: 2 BTC from his own deposit address and the rest 3 BTC from another address that server manages. In this scenario we must pay fee for at least 2 transaction. [..]? What is the solution for this problem?

No, you can simply create one transaction, which spends the two UTXOs in question and pays to your customer (note: Bitcoin uses a UTXO-based model to keep track of coin ownership, not an account-based model).

  How an I generate new address for ethereum and bitcoin cash in block chain.com api?

Questions about altcoins, service-provider recommendations, and customer service issues are all off-topic here, sorry.


Are smalltime block chains susceptible to brute force liars? My understanding is that the integrity of the bitcoin block chain is dependent on the consensus of the masses - that no single actor can write entries at will unless they. controlled over 50% of the compute power focused on calculating proofs.

If this is true, wouldn’t small time coin with much less compute power working for it be susceptible to a bad actor, assuming this actor could focus enough resources? Specifically, slightly more than the current compute power dedicated to the coin such that the bad actor controlled greater than 50%?

Yes, many small coins are susceptible to such attacks. However, the value of the coins is so small that performing a 51% attack on the coin has almost no real use whatsoever. The coins that do actually have value where performing a 51% attack would actually result in non-negligible gains for the attacker are more difficult to attack because they are actually used.


Is there a way to create 9995000 spendable BTC on regtest? I'm doing to a large stress test on 1000 node network where each node sends transactions to one another at a specific rate, and I need a way to create the funds for running it, enough so that each transaction is above the dust limit. I need a way to generate 9995000 spendable bitcoins to distribute to each address. At some point, 120 transactions will be sent per second on the network, which is why a lot of bitcoins are needed. Is there a way to get these many bitcoins to each node, which has its own address (~9800 BTC for each node, which each has one receiving address) without generating a lot of blocks and changing the subsidy variables in the source code? I'm unfamiliar with Core/bitcoind's codebase, and I might break something. Any simple solution would be appreciated.

This is not possible because the regtest network is limited to 15000 regtest BTC. Unlike mainnet and testnet, it's halving interval is 150 blocks which limits the number of regtest BTC on one chain to 15000 (actually just under that).

On regtest, you don't actually need to make outputs which reach the dust threshold. The default behavior is to allow non-standard transactions be relayed and mined on regtest and testnet. So you can just make outputs as small as you want and they should still be relayed and mineable. Furthermore, Bitcoin can actually have 0 value outputs, so you can make transactions which don't even send money, thereby removing the need to get any significant amount of regtest Bitcoin.

If for some reason regtest transactions are being rejected for being below the dust threshold, you can lower the dust threshold by using the -dustrelayfee=<amt> option. With this, you set the feerate that the dust threshold is calculated at. Since it is in BTC/kB, you can set it to be 1 satoshi per kB with -dustrelayfee=0.00000001, which is 0.0001 satoshis per byte. This should reduce the dust threshold to less than 1 satoshi allowing you to have outputs that are 1 satoshi.


Cannot call rpc api from other machine in same local network cannot call rpc api from other machine in same local network

There is a regtest node in my local network , I can call rpc api only from the node's machine,not my local machine.

I know rpcallowip is changed in recent release https://bitcoin.org/en/release/v0.18.0#configuration-option-changes

http clinet httpie

my local machine's ip: 192.168.1.155

btc node's ip: 192.168.1.132

the port 8332 is opened sudo ufw allow 8332.

bitcoind version

$ bitcoind -version
# Bitcoin Core Daemon version v0.18.0.0-g2472733a24a9364e4c6233ccd04166a26a68cc65

command start bitcoind

I start regtest , and my ip is 192.168.1.155

bitcoind -regtest -deprecatedrpc=generate -printtoconsole -rpcuser=user -rpcpassword=password -rpcallowip=0.0.0.0/24 -rpcbind=127.0.0.1  -server -rpcport=8332

client request

# request from btc node's machine
http POST http://user:password@127.0.0.1:8332 jsonrpc="2.0" method="getblockchaininfo" id=1
# successed

# request from my local machine 192.168.1.155
http POST http://user:password@192.168.1.132:8332 jsonrpc="2.0" method="getblockchaininfo" id=1
# http: error: ConnectionError: HTTPConnectionPool(host='192.168.1.132', port=8332): Max retries exceeded with url: / (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7fd6e288f438>: Failed to establish a new connection: [Errno 111] Connection refused',)) while doing POST request to URL: http://user:password@192.168.1.132:8332/

The problem is that you apply wrong options values for -rpcallowip and -rpcbind.

-rpcbind=127.0.0.1

This one tells bitcoind to bind RCP server to 127.0.0.1(localhost). That means it will be available from the same host only.

-rpcallowip=0.0.0.0/24

0.0.0.0/24 means Class C network with IP address range 0.0.0.1 - 0.0.0.254

The correct options in your case are:

-rpcallowip=192.168.1.0/24 -rpcbind=0.0.0.0

or even more secure:

-rpcallowip=192.168.1.155 -rpcbind=192.168.1.132


Bitcoin Core data to csv I would like to download the Bitcoin blockchain and use the data for machine learning purposes. For this, I have to get the data into a workable format like csv or a flat JSON etc.

I've read about approaches and the most common one seems to be through a monkeyDB. Do you know a source code that implements this method? Or do you know other methods that could be used to get the Ethereum blockchain data into a modeling friendly format?

Thanks!

I was trying to do the same thing, however, there's no explicit source of blockchain data on the internet. You'll have to download the entire blockchain transaction history by downloading Bitcoin Core to have the data at the first place. Then you'll need some parser to convert the data in raw format to more readable formats like csv or JSON.


If the PHP script and the Bitcoin wallet are on the same computer, does encrypting the link is necessary? Dears,
If the PHP script and the Bitcoin wallet are on the same computer, does encrypting the link is necessary? like turn ssl on:rpcssl=1

It probably doesn't help much.

If the wallet (server) and the script (client) are running on the same computer, and you're connecting to it directly (e.g. on 127.0.0.1), then the data being sent should never reach any external network, and could only be intercepted by the user(s) running those programs, or a system administrator with higher privileges.  In most cases, those people would also be able to recover the SSL key, so encryption would not help very much.  For that matter, they would also probably be able to recover private keys and other sensitive data directly from the files or memory being used by the programs.

On the other hand, in most cases, RPC has so little traffic that the overhead of encryption is negligible, so it costs you almost nothing to turn it on, and it might make an attacker's job somewhat more difficult.

If your system uses more advanced separation of privileges (e.g. Linux admin capabilities and securelevels) then there might be more situations where someone might have access to local network traffic but not the keys or other sensitive data.  In such cases, encryption could make more of a difference.


Bitcoin alternative designed for NVIDIA Currently the best graphics cards to mine Bitcoins are all AMDs. What should be changed in the Bitcoin protocol to make the alternative version of Bitcoins better mined by NVIDIA graphics cards? Could there be a protocol that would support both of the graphics cards produces in more or less equal way?

The specific reason that AMD cards are more efficient for Bitcoin mining is twofold and the answer to this question depends on both reasons:

AMD GPUs tend to have lower-end ALUs but make up for this by packing more ALUs onto the card overall. For most hash algorithms this is preferable.
AMD GPUs uses ALUs which can perform the 32-bit integer right rotate operation in a single instruction - Nvidia's ALUs take three processor cycles to perform the same operation. SHA256 uses this operation heavily, therefore Bitcoin mining uses this operation heavily.

Combining the two reasons above results in an overall 3x-5x faster generation of SHA256 checksums. However the two effects are not equal: Effect 1 leads to approximately 2x-3x Nvidia's performance all on its own, with Effect 2 accounting for about 1.7x performance advantage. Even if you were to choose a hashing algorithm that made less use of the BIT_ALIGN_INT instruction AMD cards would still be 2x-3x faster for hashing algorithms in general. This is because such algorithms are explicitly designed to be simple binary operations which AMD's simple ALUs can handle just as well as Nvidia's more complex ALUs.

In order to choose an algorithm which would perform better on Nvidia cards than AMD cards, you would not only have to eliminate scenarios such as #2 above where a specific instruction happens to be better implemented on one card than the other, you would also have to choose an algorithm with math complex enough that Nvidia's higher-end ALUs get the chance to individually shine. To my knowledge no such algorithm exists.

To back up my statements, here is some example data from oclHashcat's web site. The table below compares actual performance measurements from similarly priced AMD and Nvidia cards for the MD5, SHA1, MD4, NTLM and SHA256 algorithms, among others.

Keep in mind that in comparing PC1/2 and PC3/4 that the Nvidia cards actually have higher clock speeds in both cases and still perform worse. In no case did Nvidia's performance approach the performance of a similarly priced AMD card, and to my knowledge no currently implemented algorithm performs sufficiently complex mathematics to make use of the more advanced ALUs on Nvidia's cards.

In short, Nvidia cards are like a small room with several fairly intelligent people, each capable of complex mathematics while AMD's cards are like a sweatshop. Hash algorithms are the computing equivalent of mass-producing name-brand tennis shoes and so the AMD "sweatshop" card will always outperform.


I used an old wallet address. Is my coin lost? I was stupid enough to use an old exported QR code from my Electrum to send bitcoins to, and now I realized the address apparently has changed. The trader advises me the coins have been sent, so they are most likely lost in the ether -- or is there any chance this will get to my wallet eventually? I'm asking this because my Electrum is still syncing and I'm suspecting the coins might be climbing the blockchain-ladder to arrive in my account later?

If the address a wallet shows changes, that's OK. When you look at a wallet's receiving address at different times, unless it's a poorly designed wallet, it'll show different addresses. To increase anonymity, addresses shouldn't be reused, and therefore your wallet has multiple addresses. Don't worry, they'll come sooner or later (but make sure to be using the same Electrum wallet file).


Is signature/private-key required to accept payment over Lightning Network? To (1) create an invoice and (2) accept payment in LN, the node has to be online. But does the node need to sign the creating invoice or the accepting payment?

We don't have to have private key online to receive Bitcoin in on-chain transation. Rather we just need to sign the sending transaction with private key.

It would be nice if LN node doesn't have to have pricate key online for accepting payment.

Yes invoices are signed according to bolt 11. One reason we do this is to fight dos attacks. If I would not have to sign my invoice I could create an Invoice for any node. That node would not have the preimage for that payment hash and routing of the payment would fail all the time.

While I can imagine other processes that don't require a signature in the invoice we still need the private key / signature to update the payment channel on which the payment is coming in. This is needed to accept the offered htlc and to settle it. Since we certainly need a signature for the htlcs we can use them for invoices as well.


How is a Litecoin address generated? How is a litecoin address generated? What hashing do they use?

For example, bitcoin addresses are generated like so: https://en.bitcoin.it/wiki/Technical_background_of_version_1_Bitcoin_addresses

I am looking for an answer like that but can't find it anywhere. Any litecoin searches turn up with bitcoin links.

Please do not give me Litecoin address generation sites or wallets to download. I want to know how I can manually program a litecoin address generator.

Litecoin uses exactly the same procedure to generate addresses, the only difference is the network prefix.

On step 4 (Add version byte in front of RIPEMD-160 hash) instead of 0x00 for bitcoin use

0x30 for Litecoin main-net or

0x6F for Litecoin test-net.

Your address should start with L then and will be a valid Litecoin address.

Full sequence:

0 - Having a private ECDSA key

18E14A7B6A307F426A94F8114701E7C8E774E7F9A47E2C2035DB29A206321725

1 - Take the corresponding public key generated with it (65 bytes, 1 byte 0x04, 32 bytes corresponding to X coordinate, 32 bytes corresponding to Y coordinate)

0450863AD64A87AE8A2FE83C1AF1A8403CB53F53E486D8511DAD8A04887E5B23522CD470243453A299FA9E77237716103ABC11A1DF38855ED6F2EE187E9C582BA6

2 - Perform SHA-256 hashing on the public key

600FFE422B4E00731A59557A5CCA46CC183944191006324A447BDB2D98D4B408

3 - Perform RIPEMD-160 hashing on the result of SHA-256

010966776006953D5567439E5E39F86A0D273BEE

4 - Add version byte in front of RIPEMD-160 hash (0x30 for Litecoin Main Network)

30010966776006953D5567439E5E39F86A0D273BEE

(note that below steps are the Base58Check encoding, which has multiple library options available implementing it)

5 - Perform SHA-256 hash on the extended RIPEMD-160 result

27872C1C5DF98F26A09EEBE7A048A52CCFFD647098EACDB6D5D48563B0DBE7B4

6 - Perform SHA-256 hash on the result of the previous SHA-256 hash

713B731B0E30DDD0B6E1F73E2EA2A1E298A35BBDB37FF13C593028515C3B2B50

7 - Take the first 4 bytes of the second SHA-256 hash. This is the address checksum

713B731B

8 - Add the 4 checksum bytes from stage 7 at the end of extended RIPEMD-160 hash from stage 4. This is the 25-byte binary Litecoin Address.

30010966776006953D5567439E5E39F86A0D273BEE713B731B

9 - Convert the result from a byte string into a base58 string using Base58Check encoding. This is the most commonly used Litecoin Address format

LKKSCYdyWP7fJDMZ1KUDbpj3yPmQ22MQrv


Which version of the JSON-RPC protocol does Bitcoin use? I would like to get some clarification on which version  of the JSON-RPC protocol does Bitcoin use? 1.0 or 2.0?

A little of both:

//
// JSON-RPC protocol.  Bitcoin speaks version 1.0 for maximum compatibility,
// but uses JSON-RPC 1.1/2.0 standards for parts of the 1.0 standard that were
// unspecified (HTTP errors and contents of 'error').
//
// 1.0 spec: http://json-rpc.org/wiki/specification
// 1.2 spec: http://groups.google.com/group/json-rpc/web/json-rpc-over-http
// http://www.codeproject.com/KB/recipes/JSON_Spirit.aspx
//


Is there a service to withdraw dollars by wire transfer with small fees? I need to make a bank transfer to a US bank account and found out that MTGOX is asking for 2000 CNY fee. That is too much since the amount of money I want to transfer is smaller than that.

Is there any exchange service with smaller fees?

Take out to Dwolla (FREE Account), then move to bank account for a flat fee of  $0.25.  I use to use them all the time like that.

Fee list from Dwolla:
https://www.dwolla.com/fees

MtGox doesn't charge anything to send to Dwolla, they just charge you to transfer from BTC to Dollar's. But it's cheaper than what it was for ACH transfer.


Can A Mining Farm Profit From Transactions Background

Last night, I debated a friend of mine about the decentralized nature of bitcoin.  He made an argument indicating that the Chinese Communist Party isn't concerned about bitcoin because more and more bitcoin transactions are completed in China and he believes the Communist Party of China is behind these mining farms.  He claims that once all bitcoins are mined, with China owning as many mining farms as they do, they can charge a tiny fraction for every transaction they process, thus making a stable bitcoin revenue over the long run.  His point is that it's in their inherent interest for bitcoin to become important for their citizens to use, as it's a small tax on all the usage.

This is his way of explaining why China, unlike Russia, hasn't made bitcoin illegal for citizens to use (even if the citizens are trying to hide capital).  I was not aware that a miner processing transactions could charge a small fee.

Question

Can a company/country set up a mining farm for processing transactions and charge a fraction for every transaction, say 0.0001 bitcoins per every transaction it completes?

Fees only get created by the individuals creating the transactions. There is no way for a miner to take a fee from a transaction that did not include a fee. Miners can be selective if they choose to and only include transactions with fees.

Essentially the answer to your question is no they cannot gain any advantage over any other miner. They can select and include transactions with fees but this can be done by all miners.


What is the benefit of having a fixed target block interval? By design Bitcoin targets a block interval of 10 minutes.

How does the blockchain benefit from maintaining a bounded block time?

Block mining time is not fixed. 10 minutes is just average value which is aimed by difficulty adjustment algorithm to balance two contradicting requirements:

low transaction time requires low block mining time.
low probability to mine several different blocks simultaneously requires higher block mining time.


converting RUBY script into PYTHON ( Recovering private key when someone uses the same k twice ) require 'ecdsa'

public_key_hex = '02a50eb66887d03fe186b608f477d99bc7631c56e64bb3af7dc97e71b917c5b364'
msghash1_hex = '01b125d18422cdfa7b153f5bcf5b01927cf59791d1d9810009c70cd37b14f4e6'
msghash2_hex = '339ff7b1ced3a45c988b3e4e239ea745db3b2b3fda6208134691bd2e4a37d6e1'
sig1_hex = '304402200861cce1da15fc2dd79f1164c4f7b3e6c1526e7e8d85716578689ca9a5dc349d02206cf26e2776f7c94cafcee05cc810471ddca16fa864d13d57bee1c06ce39a3188'
sig2_hex = '304402200861cce1da15fc2dd79f1164c4f7b3e6c1526e7e8d85716578689ca9a5dc349d02204ba75bdda43b3aab84b895cfd9ef13a477182657faaf286a7b0d25f0cb9a7de2'

group = ECDSA::Group::Secp256k1

def hex_to_binary(str)
str.scan(/../).map(&:hex).pack('C*')
end

public_key_str = hex_to_binary(public_key_hex)
public_key = ECDSA::Format::PointOctetString.decode(public_key_str, group)

puts 'public key x: %#x' % public_key.x
puts 'public key y: %#x' % public_key.y

msghash1 = hex_to_binary(msghash1_hex)
msghash2 = hex_to_binary(msghash2_hex)
sig1 = ECDSA::Format::SignatureDerString.decode(hex_to_binary(sig1_hex))
sig2 = ECDSA::Format::SignatureDerString.decode(hex_to_binary(sig2_hex))

raise 'R values are not the same' if sig1.r != sig2.r

r = sig1.r
puts 'sig r: %#x' % r
puts 'sig1 s: %#x' % sig1.s
puts 'sig2 s: %#x' % sig2.s

sig1_valid = ECDSA.valid_signature?(public_key, msghash1, sig1)
sig2_valid = ECDSA.valid_signature?(public_key, msghash2, sig2)
puts "sig1 valid: #{sig1_valid}"
puts "sig2 valid: #{sig2_valid}"

# Step 1: k = (z1 - z2)/(s1 - s2)
field = ECDSA::PrimeField.new(group.order)
z1 = ECDSA::Format::IntegerOctetString.decode(msghash1)
z2 = ECDSA::Format::IntegerOctetString.decode(msghash2)

k_candidates = [
field.mod((z1 - z2) * field.inverse(sig1.s - sig2.s)),
field.mod((z1 - z2) * field.inverse(sig1.s + sig2.s)),
field.mod((z1 - z2) * field.inverse(-sig1.s - sig2.s)),
field.mod((z1 - z2) * field.inverse(-sig1.s + sig2.s)),
]

private_key = nil
k_candidates.each do |k|
 next unless group.new_point(k).x == r
 private_key_maybe = field.mod(field.mod(sig1.s * k - z1) * field.inverse(r))
 if public_key == group.new_point(private_key_maybe)
  private_key = private_key_maybe
 end
end

puts 'private key: %#x' % private_key

some one please convert above code into python please from
Recovering private key when someone uses the same k twice in ECDSA signatures

Here's what I've been doing recently in Python. This isn't a very complete solution (it doesn't validate its input, it requires that you've already decoded the signature into r & s, it doesn't derive a public key or address from the private key, it doesn't deal with signature malleability issues, it only works with certain types of curves such as Bitcoin's secp256k1), but it should be adequate in most cases.

n  = 0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141  # order of base point G
r  = 0xd47ce4c025c35ec440bc81d99834a624875161a26bf56ef7fdc0f5d52f843ad1
s1 = 0x78c9d47ef31caf0102f9ae2489d7c78ab51692ddd898b6eb20b16a0d25b01c78
z1 = 0x4435b0704795962ac9efe71b841a5366434f552d8b5beca04a48426c15fd9ad7
s2 = 0x240bcda3967d66c71c92ffc4c4486d99968183f198c5fe1612a5cc99a05ba99a
z2 = 0x6b8bb3201a7ce4c7ed72eddc46d9b6d7350bc2eb8c28df9763518de8d66b0b52

def modinv(x, n=n): return pow(x, n-2, n)  # modular multiplicative inverse (requires that n is prime)

k = (z1 - z2) * modinv(s1 - s2) % n ; print('k = {:x}'.format(k))
print('privkey = {:x}'.format( (s1 * k - z1) * modinv(r) % n ))  # these two should
print('privkey = {:x}'.format( (s2 * k - z2) * modinv(r) % n ))  # be the same

Updated code

Here's a more complete (but also more difficult to read) version which which (a) displays different possibilities to compensate for negated s values (as noted by David Grayson in this answer), and (b) verifies the private key against the signature-derived public keys if you have pycoin installed.

# order of base point G of secp256k1
n = 0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141

# modular multiplicative inverse (requires that n is prime)
def modinv(x, n=n):
    return pow(x, n-2, n)

# the two k candidates which aren't just negations of themselves
def k_candidates(s1, z1, s2, z2, n=n):
    z1_z2 = z1 - z2
    yield z1_z2 * modinv(s1 - s2, n) % n
    yield z1_z2 * modinv(s1 + s2, n) % n

# generates two tuples, each with (privkey, k_possibility_1, k_possibility_2)
def privkey_k_candidates(r, s1, z1, s2, z2, n=n):
    modinv_r = modinv(r, n)
    for k in k_candidates(s1, z1, s2, z2, n):
        yield (s1 * k - z1) * modinv_r % n,  k,  -k % n

r  = 0xd47ce4c025c35ec440bc81d99834a624875161a26bf56ef7fdc0f5d52f843ad1
s1 = 0x78c9d47ef31caf0102f9ae2489d7c78ab51692ddd898b6eb20b16a0d25b01c78
z1 = 0x4435b0704795962ac9efe71b841a5366434f552d8b5beca04a48426c15fd9ad7
s2 = 0x240bcda3967d66c71c92ffc4c4486d99968183f198c5fe1612a5cc99a05ba99a
z2 = 0x6b8bb3201a7ce4c7ed72eddc46d9b6d7350bc2eb8c28df9763518de8d66b0b52

try:
    from pycoin.ecdsa import *
    pubkeys = possible_public_pairs_for_signature(generator_secp256k1, z1, (r, s1))
    for privkey, k1, k2 in privkey_k_candidates(r, s1, z1, s2, z2):
        if public_pair_for_secret_exponent(generator_secp256k1, privkey) in pubkeys:
            print('k       = {:x}'.format(k1))
            print('or k    = {:x}'.format(k2))
            print('privkey = {:x}'.format(privkey))
            break
    else:
        print('privkey not found')

except ImportError:
    for privkey, k1, k2 in privkey_k_candidates(r, s1, z1, s2, z2):
        print('possible k       = {:x}'  .format(k1))
        print('possible k       = {:x}'  .format(k2))
        print('possible privkey = {:x}\n'.format(privkey))


What's the impact of net-splits on block generation... over a long period of time? Part 1

For this question, assume the overall hashrate of the environment is constant.

If 25% of the network hashpower were to be isolated (Australia had no Internet for example), what is the effect on block generation?

I suspect that blocks in Australia will take 75% longer to confirm, and the the main chain will confirm  75% faster  (Edit: it will take 25% longer for the main chain to confirm, difficulty will adjust downward).

Part 2

If I extrapolate the effects suppose

This outage is long-lasting
A multiple of the 2016th block is reached on the main chain.  Maybe several multiples.
Difficulty is adjusted.

Given that the Bitcoin client is hard coded to prevent a change in difficulty more than 4x the the current difficulty:

What would happen to the isolated Australian chain if it reconnects to the main chain?  (w.r.t. the difficulty adjustment)
Suppose a different percent of the network were to become isolated.  What combination of %isolated, duration, and network hashrate would cause a 4x difficulty to be reached?

If 25% of the network hashpower were to be isolated (Australia had no Internet for example), what is the effect on block generation?

Aussie transactions take 4x longer to confirm, actually. Everybody else's transactions take 33% longer (1.0/0.75)

  What would happen to the isolated Australian chain if it reconnects to the main chain? (w.r.t. the difficulty adjustment)

It's instantly blown away, and the main chain is downloaded to all of the Aussie bitcoin clients.

  Suppose a different percent of the network were to become isolated. What combination of %isolated, duration, and network hashrate would cause a 4x difficulty to be reached?

Suppose that 3/4 of miners suddenly have no internet access. For 8 weeks. That's when you'd see the difficulty drop to 1/4 of its previous value.


How can I send bitcoins without waiting for at least 1confirmation? I'm making a service that is similar to markets so I sometimes need to make users send bitcoins without waiting for one confirmation.
So I'm considering how markets that deal cryptocurrencies solve the problem.

Most markets run a centralized server that keeps track of user accounts, and then only submits transactions to the bitcoin blockchain when a user withdraws their funds (or the move coins internally, etc). This model leaves the user with more risk (the exchange gets hacked and they lose their coins), but they are able to perform a huge amount of trades without paying any transaction fees to the bitcoin network.


How to direct bitcoins from Triplemining to a wallet? I use Triplemining.com for the share site, GUIminer for the Miner, and Multibit for the wallet. I just got this configured. On the "Account" page of Triple mining, it says "change payout address", but I don't remember specifying one. I am wondering what I put in there to hook up my Multibit wallet to TripleMining.

I think there isn't one specified, and when you generate coins, they just stay on the site's wallet.
Just take your bitcoin receiving address from Multibit and paste that to the "payout address"-field.


What exactly is the benefit of buying a hardware wallet for Bitcoin? Let's say I invest in a physical Bitcoin wallet. They aren't exactly free, so it's going to cost me money, effort, time and energy (to set it up and put coins on it).
Then what?
It's not like I can actually use it in physical stores. And if I'm supposed to use it as a secure storage device for all my coins, doesn't it just scream "STEAL/SEIZE ME!" to burglars and the cops? And if I keep it hidden in my fireproof safe, why buy such a hardware wallet instead of just an encrypted USB stick with a wallet.dat on it? Much cheaper and the convenience of a hardware wallet is gone if it's physically tucked away in my safe anyway.
Basically every way I look at it, it seems like a bad idea.
The only situation I can think of where it would be good is if I were to meet up with a person physically to buy something from them with Bitcoin. I wouldn't want to take a computer with me, even a laptop, so then that hardware wallet would come in handy, if I "load it up" from my Bitcoin Core before leaving my home.
But that's a pretty specific and rare (to me) scenario. It's never happened, in fact.
As nice as it first sounds to have a dedicated hardware device which in theory allows me to easily pay people Bitcoin "on the go", I don't see the actual use of this in this world as it is now. Is this only useful in some theoretical future when Bitcoin has taken over? If so, is it really a good idea to buy a hardware wallet today and risk it becoming obsolete by the time Bitcoin ever takes off?
Is there something I'm missing?

Hardware wallets are generally designed to securely store your private keys in an always-offline environment ("cold storage"). This allows the user to have confidence that their coins will not be stolen by malware/hacking/etc, since any attacker would need to have physical access to the device itself.
If nothing else, this is the main advantage of a hardware wallet: the user can securely store their funds, without needing too much technical knowledge or skill.

It's not like I can actually use it in physical stores.

Well, if the store accepts BTC payments then you could, but I agree this is a perhaps less important/rare use case at the moment.

And if I'm supposed to use it as a secure storage device for all my coins, doesn't it just scream "STEAL/SEIZE ME!" to burglars and the cops?

Yes, any educated thief/cop/etc may view a hardware wallet as a target for theft. Most hardware wallets have security against this though, such as a PIN to unlock the device (usually with the threat of wiping the device after some number of failed attempts). Each device will have different features in this way, so as a user you'd have to decide what fits your needs best.
Keep in mind that you can also just use the device to generate a wallet in an offline/secure environment, then create and test backups of that wallet, and finally destroy the hardware wallet device itself. In this way, you could create a cold storage setup, without the added risk of having a device which is obviously a bitcoin hardware wallet in your possession (of course you'll need to keep the backup, but the idea is that the backup may be easier to hide- for example using steganographic techniques).

why buy such a hardware wallet instead of just an encrypted USB stick with a wallet.dat on it?

If the wallet.dat file was generated on a computer which connects to the internet at any point in time (past/present/future), then you will not have the strongest of guarantees that it is not infected with malware. The same goes for the USB stick.
A hardware wallet, on the other hand, should be designed to have extremely restricted communication channels with the outside world, such that the user can have a higher assurance that their privkeys have not been leaked. In many cases, I've seen hardware wallets include a physical confirmation that the firmware running on the device is genuine.
Worth mentioning as well: no electronic device should be used as the only form of long-term storage for a user's funds. Bit-rot and general electronic failure are guarantees, given a long enough timeline. It is very important to have a physical backup of the privkeys as well (think: written on paper, stamped into metal, etc. This backup usually comes in the form of a mnemonic seed phrase these days).

Of course, if you're a technically savvy, then you may prefer to create your own cold storage device, perhaps something as simple as a raspberry pi running Tails as the operating system. But for many users, a hardware wallet offers a great mix of security and convenience, for a reasonable price.
The extremely adversarially-minded user may also feel alarmed at the prospect of a supply-chain attack against a hardware wallet manufacturer. They would be great targets after all! To combat this, the user may choose to use a multi-sig setup, with signing keys generated on multiple devices from different manufacturers, and perhaps even keys from bitcoin-core, etc, as well.

Ultimately, there is no 'perfect solution' for security of your funds, each user will have to make a choice based on their needs, preferences, and comfort level.


How can I tell whether transactions were (not) made via BitPay / Coinbase? Background

Recently, Rep. Steve Stockman posed for a photo op with his Bitcoin address on a big QR code, which got shared. He has a Bitcoin donation page which asks for identifying info and goes through BitPay, but of course anyone could send him Bitcoin anonymously, without using that page, if they know the address to send it to.

The Libertarian Party and CoinPAC have Bitcoin donation pages that don't outright list their addresses, but block chain analysis of a donation would probably reveal their main address(es), and those addresses might have received contributions that didn't go through the donation pages. (The LP's page doesn't even require giving your info for it to show you the donation address.)

Stockman & LP's donation pages use BitPay; CoinPAC's uses Bitcoin Builder (which in turn uses Coinbase).

The Livingston County Libertarian Party (addr) and Jim Fulner (addr) publish their Bitcoin addresses openly on their websites, and the Bitcoin Voters PAC published a list of their Bitcoin addresses in their official FEC registration filing‡. None of them even have Bitcoin donation pages that collect info, so of course anything sent to them presumably wasn't properly attributed.

Problem

The FEC requires PACs to know the identity of all contributors (especially for "in-kind" contributions, i.e. anything other than fiat currency). If any of the above received any Bitcoin contributions that didn't get attributed to a specific person (e.g. by going through a donation page that requires disclosing your ID before telling you the address to donate to), that'd probably be an unlawful unidentified in-kind contribution.

For our upcoming FEC advisory opinion request about how to handle Bitcoin, I'd like to have example(s) of how:

it's not possible to "refuse" a Bitcoin transaction (e.g. someone contributing to the above outside of their donation pages)
it's not possible to reliably refund a Bitcoin to the control of the person who sent it (e.g. a transaction that was laundered or came from an exchange)
some transactions are worth less than they cost to get rid of (e.g. dust or complex / intentionally large-byte-size transactions)

Our request proposes a framework for how to deal with these problems (e.g. one could donate unattributed Bitcoin contributions to a charity). I just want real-life examples I can point to that show it's not a purely theoretical issue.

Question

How can I show that Stockman, the Libertarian Party, and/or CoinPAC have received BTC contributions that did not come via their donation pages (and thus BitPay or Coinbase)?

Pointing to specific transactions they received and explaining how it is clear to a third party that those transaction(s) weren't made via BitPay/Coinbase would be extremely helpful.

Other examples of political committees that have published a Bitcoin address or are currently receiving Bitcoins in some way would also be much appreciated.

Thanks in advance!

More info

† See our bitcoin AOR page & my G+ post for some more background.

For the record, we are strictly non-partisan. Our intent here is not to make any particular candidate or party look bad, but rather support transparency in campaign finance.

We want to accept Bitcoin  (potential donors have requested it and we think it's a good idea), but we think it needs to be done carefully to be compatible with current law and good public policy.

Comments on our AOR are welcome, but not really on topic here; I'm just pointing to it for context. The question here is simply: how can I identify a transaction as being / not being made via BitPay or Coinbase, just looking at the block chain? (Let's assume there's no subpoena involved. :-P)

‡ So you needn't transcribe:

18kKJ15uz1nuMJ2kacuahLKLL9NwnsbRQi
1EsR4cdbgPvnD3Gk6wNkTotdzexiN56wXt
14jc8MtHxE6M6Xn7LarvZnXF6GgaaRy1PY
12QeAyDyXiMVn5uwpQUHwS8g2Z3SZf2Kvx
1GuHY98Bxf4mFw2CQEUXqwDUTRqnTRrCt8
113pdko8qQYsvkbV4r7H247oFPFNMnUYqY
1M9AfWnRFmgQgAuTsQssL523ANsxKzfygs
199JdcXMQ41eA9ZPTLUktR9kfAiQRhaErW
1AZxfdTXg5V3gRZMtMfQZrwgBeaQMAtKqN
1NyuGppGprR6uM2koN7hH8wGP8bk6wKh15

Only way is if Coinbase/Bitpay publicly released their addresses, which they won't.


How to completely remove Bitcoin Lightning from Raspberry Pi I finished the installation of Bitcoin Core and Lightning but somehow i messed up with the certificates and the creation of the wallet and now im struggling to run lightning with the right users and the wallet creation was simply a mess, therefore how to remove all traces of lightning from my pi and start the installation from scratch?

I don't know which Lightning Network node your are running but since you are talking about bitcoin core and not btcd I assume you run c-lightning. There you should be able to remove everything with make uninstall


Can you assume that all inputs to a Bitcoin transaction are controlled by the same person? When you are looking at a Bicoin transaction in the block chain and it has inputs from multiple addresses is it safe to assume that those addresses are all controlled by the same person/organization/wallet software?

Here is an example of a transaction with 31 different input addresses

https://blockchain.info/tx/a6bffa6208c72412399997b0c504670662e259fd5ba50128d0e2823b739bd18b

If I have definitive proof that one of those addresses is associated with someone can I infer that the other 30 are as well?

No.

In practice, it is likely, but in several more complex use cases, transactions can be jointly constructed.

For example CoinJoin implies combining both inputs and outputs from multiple people together into a single transaction to make it less obvious which outputs belong to whom.


What information is available from the blockchains of privacy currencies? Some currencies such as Monero and Zcash focus on protecting user privacy as much as possible. What information is available from the blockchains of these currencies?

Number of wallets? Transaction details? Anything else?

Unlike many users might think, Bitcoin blockchain is completely transparent linking all your transaction history and those who you are transacting with. Everyone who has ever transacted with you or will be in future is able to see what amount you have received from or sent to which address, forever. Some (centralised) mixer/tumbling services try to mitigate this fact changing your BTC into some completely other ones, but they still have their history and you don't know what it is.

Privacy focussed coins try to solve this at protocol level, I'll try to summarise:

Dash (and Pivx fork) offer you an option to use a sort of CoinJoin which is performed by their Master Nodes and can have several rounds. This is pretty similar to tumbling services but you are not at risk to loose your funds. However, you still have to wait for mixing partners in every round you make and this can take minutes up to several hours for every single round. Since the amount of mixing partners is very limited, an attacker could simply offer high supply to mix with and be able to track your mixed funds anyway.
Verge is a joke. It's basically Dogecoin over TOR hiding your IP but having a completely transparent blockchain. Their Wraith protocol just uses some other notation for receivers addresses, but they are stored in plain on the blockchain.
In Zcash, Zcoin you have an option to use ZK-Snarks and send your transparent funds to a shielded z-address. Unfortunately ZK-Snarks are very computation heavy and need several minutes on modern hardware computers for each transaction to be generated, they are not available for mobile devices yet at all. They are fully shielded hiding sender, receiver and amount of a transaction. However, they are barely used and no exchange or payment service is accepting them to date, so you have to claim them back on their completely transparent t-address blockchain before being able to spend them.
Monero (beside some small forks of it) is the only coin with mandatory privacy enabled for every single transaction. Ring signatures obfuscate the real sender, stealth addresses hide the receiver and (ring) confidential transactions hide the amount of the transaction by default. Unlike all the optional private coins you cannot tell how many Monero wallets are in existence nor how much has been transacted. An external observer cannot say who send how much money to whom. Even as receiver you still don't know the sender's address, you can only determine it by your sub-address or payment id used.


BTC confirmed however funds not received I would really appreciate if someone could help me with my problem. I recently sold some coins to an exchange and then wish to have few bitcoins i.e. 0.01627139, transferred to my wallet which never happened. Transaction Id given to me by exchange is -  13e049ecf32a3226f7c82b558d968c255971272024a37b3509bb90effa92f8f2.

when I search with above-mentioned transaction id in blockchain.info I see around 120 confirmations to the block however I have not received my amount i.e. 0.01627139 in my wallet and it says as "Unspent". I wish to know is it the fault of the exchange or my wallet provider not reflecting this transaction ? If it is the fault of exchange do i need to ask them to rebroadcast my transaction again.
What is the "Unspent".

You have to wait within 1 working day when you sell bitcoins on Zebpay.
After Zebpay gets everything clear up, your wallet will show you the amount of Bitcoin, which is 0.01627139 btc in this case. Here is the FAQ from Zebpay.

Zepbay is online wallet service which means even if you see confirmations on blockchain.info, your online wallet might not show you the exact same transaction history because of some reasons that the company has to deal with. But I am pretty sure your wallet will show you the amount of BTC you see on blockchain.info within 1 working day unless the company gets bankrupt.

If there are confirmations then the transaction is confirmed but, it is best to wait for 6 confirmations. Unspent means that there is no additional transaction yet created to spend the bitcoins.