Can I actually profit from bitcoin mining on my PC? My PC is kind of power hungry but it's also quite powerful too I was wondering if I might be able to profit from bitcoin mining without a mining rig, even if the profits are small.

Relevant Specs:
GPU: AMD RX 480
AMD: FX 8320e
PSU: 450w Thermaltake 80+ Bronze PSU
OS: Ubuntu 16.04 LTS

You definitely will not make any kind of profit, even if you had free electricity. The chances of bitcoin mining frying your computer are higher than the chances you make enough bitcoin to pay back a new one.

Bitcoin mining used to be done on CPUs and GPUs (6-8 years ago, not sure on the exact time range), and later was done on Field-Programmable Gate Array (FPGA) miners, which are more powerful than CPU and GPU mining. In 2013 the first Application-Specific Integrated Circuit (ASIC) miners were created, and these are created for specifically mining bitcoin. I would highly recommend against mining with your CPU, as you can't compete with the ASIC miners. I wrote a bitcoin mining guide here (archived) which explains a bit more about mining and discusses why you shouldn't mine with a PC. However, as I lay out in the article, I definitely think you should buy a small, inexpensive ASIC miner to learn more about bitcoin and mine a few bits because I think it's a fun and informative hobby.


Help retrieving my old wallet So i made my first bitcoin wallet with multibit a long time ago and it didn't require wallet words to create the wallet (aka i don't have wallet words for that wallet). I do however have the wallet files. But seeing as i had a problem with the old wallet i had to update to the newest version of Multibit HD. I did that but how can i get my bitcoins on my old bitcoin wallet back? If i click restore it is asking me for my wallet words but i don't have those because they were never required when i made my first wallet. Please help.

I had a similar problem with the Android Wallet which is also based on bitcoinj. I wanted to transfer my backed up wallet from my old phone to my new phone. The problem I had was that I wanted to take advantage of the new wallet words, as well as have my old addresses with me.

The only thing I could come up with is just sending the funds to my new wallet and deleting the old one.

I figured that no one would need to send me money to the old addresses. And, if they did, I would have to tell them that the addresses were compromised or that I didn't have access to them anymore. Moreover, because of the bug on Android, my old wallet made an automatic transaction flagging some old addresses as compromised.

The new wallets (and Bitcoin core itself) encourage the use of only one address per transaction. So, I think that transferring funds to the new wallet is the easiest way to go.

Hope this helps.


What is the maximum allowed password complexity in Multibit What are the maximum number of characters allowed in a Multibit password, and which characters are allowed?

Since I use Keepass as a password manager, my usual practice is to generate passwords with the maximum allowed complexity.

Internally the password is a byte array (made from the unicode representation of the characters).

The only hard limit is the amount of memory the bytes take up in the MultiBit process. If you had a password of a million characters I think it would work but a billion characters would probably break it.


Does double spending happen at all? I'm a complete beginner to anything and everything about crypto. I've been trying to research a lot about it, and I have recently just been trying to learn and understand some of the basics.
I was wondering if double spending ever happens at all?
Does it happen every day, rarely, or not at all?

It depends on what you mean by 'double spend'. Spending bitcoin just means using it to buy something. Therefore 'successfully' double spending bitcoin would just mean that you were able to buy something from two different people, even though one (or maybe both) end up being short of the bitcoin they thought they received.

The way bitcoin works is that there is a blockchain which contains all the bitcoin transactions that have ever happened. An interesting property of the blockchain is that the longer a transaction has been included in the blockchain, the more certain you can be that it'll remain there in the future. Transactions are added in 'blocks' which are produced on average every 10 minutes.

In this way, merchants would decide how long to wait before considering a transaction as 'final', ie when they will complete their half of the exchange with a customer. So for example, if a merchant was selling a house, they may wait until 6 blocks before handing over the deeds. Similarly, a coffee shop might accept a bitcoin transaction even before it has been added to the blockchain, as long as they can see it has been broadcast.

Since most online stores would wait for say 3 blocks, and it probably isn't that profitable to pull it off in any coffee shops or bars accepting bitcoins, it probably doesn't happen that often.

It's worth noting that nobody can know for sure how often double spends happen, not even miners. There's no information on the blockchain about whether bitcoins were successfully exchanged for other goods.


How many proof-of-work algorithm exists for crypto currencies? How many proof-of-work algorithm exists for crypto currencies ? We know PoW in Bitcoin and Etherium are different. Is there any other algorithm used for crypto currencies ?

Any Strong Сryptography Hash Function can be used as PoW

So, the number of algorithms can be infinite. Counting the number of currently used hash-functions has no sense.


How do internet wallets connected to full blockchain nodes How do internet wallets such as Coinbase connect to the a blockchain node? Doesn’t the node itself create a default wallet object on startup? How is this replaced by internet wallets which hold multiple address until account credentials.

How do internet wallets such as Coinbase connect to the a blockchain node?

Using an API provided for that purpose. For example Bitcoin core's API

Doesn’t the node itself create a default wallet object on startup?

Not all nodes are based on Bitcoin core. Apart from the development costs there is nothing that prevents exchanges writing their own software to act as a Bitcoin node.
There are ways of running a node that don't create an unwanted wallet. (e.g. set disablewallet=1 in the bitcoin.conf file.)

How is this replaced by internet wallets which hold multiple address until account credentials.

In proprietary ways that are likely different from exchange to exchange and which are likely company confidential.


My seed from Electrum has 12 + 2 extension words. Iconomi ask for 12 My seed from Electrum has 12 + 2 extension words. Iconomi ask for 12, 18 or so. How can i do to claim my BTG?
Any way to convert 12+2 seed to bip39?

Unfortunately Coinomi uses BIP32/BIP44, those are not compatible with Electrum seed. What you need to do in order to retrieve your BTG:

Move your BTC to a new wallet, so they stay secure and safe.
Make a new wallet with Coinomi.
Use the sweep function to sweep private keys from your old BTC wallet.
Shouldn't be that many private keys needed to sweep, usually 1 - 3 that hold BTG.
Or you can check on block explorer before sweeping.


Making Bitcoin Core 0.12.0 maximize by bandwidth Bitcoin Core 0.12.0 added many bandwidth (e.g., maxuploadtarget) and rate limiting (e.g., with maxmempool) features.

I have maxuploadtarget set to 0 (default; unlimited), yet I used to get several gigabytes of traffic each day. Now I only get a few hundred. Why?

What must I do to make Bitcoin core maximize my bandwidth?

The new option is called maxuploadtarget. It joins maxconnections and listen in the list of things that can be used to control the bandwidth and resource usage of your Bitcoin client. maxuploadtarget controls the bandwidth used in a much more precise way than was previously possible without external tools.

maxuploadtarget is off by default. You don't need to do anything. More documentation is available here.


Can a transaction have a single 0-value OP_RETURN as its only output? My goal is to create a transaction that spends dust outputs to a miner. Since the goal is to reduce the UTXO set by consuming low value outputs, I do not want to create any new UTXO by actually sending Bitcoin to an address.

Is it valid to make a transaction with several inputs and only one single, zero value prunable OP RETURN output?

Yes. Such transactions are valid and standard.


What does 1 day PoW mean? I see several coins advertising 1 day PoW.
An example is this coin. https://github.com/concealcoin/concealcoin

I have been studying the code but must be missing a critical part as none of the math adds to 1 day.

Can anyone shed light on this? What part of the code am I missing?

Main.cpp

CBigNum bnProofOfWorkLimit(~uint256(0) >> 20); // "standard" scrypt target limit for proof of work, results with 0,000244140625 proof-of-work difficulty
CBigNum bnProofOfStakeLimit(~uint256(0) >> 20);
CBigNum bnProofOfWorkLimitTestNet(~uint256(0) >> 16);

unsigned int nTargetSpacing = 1 * 30; // 30 seconds
unsigned int nStakeMinAge = 24 * 60 * 60; // 24 hours
unsigned int nStakeMaxAge = 30 * 24 * 60 * 60;           // 30 days
unsigned int nModifierInterval = 10 * 60; // time to elapse before new modifier is computed

int nCoinbaseMaturity = 80;
CBlockIndex* pindexGenesisBlock = NULL;
int nBestHeight = -1;

and the rewards from main.cpp
// miner's coin base reward
int64_t GetProofOfWorkReward(int64_t nFees)
{
    int64_t nSubsidy = 3500 * COIN;

    if (fDebug && GetBoolArg("-printcreation"))
        printf("GetProofOfWorkReward() : create=%s nSubsidy=%"PRId64"\n", FormatMoney(nSubsidy).c_str(), nSubsidy);

    return nSubsidy + nFees;
}

Main.h

static const int LAST_POW_BLOCK = 2880;

static const unsigned int MAX_BLOCK_SIZE = 1000000;
static const unsigned int MAX_BLOCK_SIZE_GEN = MAX_BLOCK_SIZE/2;
static const unsigned int MAX_BLOCK_SIGOPS = MAX_BLOCK_SIZE/50;
static const unsigned int MAX_ORPHAN_TRANSACTIONS = MAX_BLOCK_SIZE/100;
static const unsigned int MAX_INV_SZ = 50000;
static const int64_t MIN_TX_FEE = 1000;
static const int64_t MIN_RELAY_TX_FEE = MIN_TX_FEE;
static const int64_t MAX_MONEY = 17000000 * COIN;
static const int64_t COIN_YEAR_REWARD = 3 * CENT; // 3% per year
static const int64_t MAX_MINT_PROOF_OF_STAKE = 0.03 * COIN; // 3% annual interest
static const int MODIFIER_INTERVAL_SWITCH = 2000;

It doesn't have a 24-hour block time, it issued all its PoW coins in the first 24 hours of existence.

The math you're looking for is nTargetSpacing * LAST_POW_BLOCK, which multiplies to 86400, the number of seconds in 24 hours.

As you can see from their home page (screenshot), that worked out about as well as you'd expect.


How do wallets select which balances get sent as part of a transaction? I'm a newbie at this and still trying to get my head around Bitcoin. Three linked questions around how the transaction works...

1) How does the wallet decide which balances/addresses form part of a new payment transaction (to go as the input)?

2) Do all transactions generate 'change' - i.e. a second output?

3) Does the fee for a transaction go to a newly generated miner's Bitcoin address, a pre-recorded miner's address, or is there no output in the blockchain associated with this?

Thanks and apologies for technical inaccuracies and silly questions.

The standard software uses some heuristics trying to minimize the transaction data size (which mostly means as few inputs as possible), with preference to older outputs which have higher priority. More information is available at What is the coin selection algorithm? and https://en.bitcoin.it/wiki/User:Gmaxwell/coin_selection.
If the sum of the inputs you use is larger than the amount of coins you wish to send, and you want to get the difference back rather than paying to the miner, you'll need a change output. Since the inputs almost never happen to sum up exactly, and you do want the change, almost all transactions have a change output; but there's no rule saying there must be one.
Every block has a special generation transaction. The miner who finds the block can freely choose the outputs for this transaction, as long as their total value is no more than the generated coins + total transaction fee.


I have a casascius coin -- how can I sell it? I was given an actual casascius bitcoin minted in 2011 as a tip, and I'd like to know where I can exchange it for US dollars.

How would I extract the private key from this coin to gain access to the digital bitcoins if I were to sell them online?

You have two routes here:
Sell the physical Bitcoin
Don't remove the sticker on the back. Use a website like localbitcoins to sell it to someone near you.
Some people might want a physical Bitcoin, especially since they're not being made anymore.
Sell the Bitcoin 'contained' within the physical coin.
Peel off the sticker on the back. Inside will be a code that lets you spend the Bitcoin. (I recommend using Blockchain.info as your e-wallet.) You can sell the Bitcoin online or locally.
The remaining brass part is mostly worthless.


Do full-nodes process all transactions before broadcasting the new block header? If so, why not do it after (re)broadcast? I think it would cut down on lag time.

Since the node would still validate the PoW and the previousblockhash, it would not be possible to DoS the network with invalid headers
Miners could begin processing the candidate block from its header and the list of transaction hashes since they already likely have > 90% of those txs.
Miners and full-nodes would still only update their head once all the txs are validated.
Miners could determine how much time (=money) they are losing by comparing the time they receive the header and the last tx.

Do full-nodes process all txs before broadcasting the new blockheader?

It depends. For nodes having protocol version 70015 and higher, the peer will announce the compact block even before full validation of the transactions contained in the block. However, the header has to be conform with the difficulty requirement. For nodes using protocol version 70015 and lower, the blocks are fully processed before broadcast.

  Since the node would still validate the PoW and the previousblockhash, it would not be possible to DoS the network with invalid headers

Yes, that is exactly what Bitcoin full nodes do. Whenever you come online, or receive a new block header, the block headers will be verified first to see that it has the required PoW. As you mentioned this does help prevent DoS attacks.

  Miners could begin processing the candidate block from its header and the list of transaction hashes since they already likely have > 90% of those txs.

Miners actually do that. Most of them will build and start processing the new block before even verifying the old one so as to not waste any time mining. However, there will be some transactions in that previous block that the miner hadn't seen in the past. Although those transactions will be very few, the miner would not know which UTXOs have been consumed by those transactions.

Thus miners would start building an empty block (containing only the coinbase transaction) on top of the block that they have just received which hasn't been fully verified. After the previous block gets verified in parallel, the miners will then add the unconfirmed valid transactions from the mempool to the block that they are currently mining.

  Miners could determine how much time (=money) they are losing by comparing the time they receive the header and the last tx.

As I mentioned above, it is not only the time but also the uncertainty related to what UTXOs have been consumed by the block that had transactions that the miner did not see in the past. As a result miners have to start building an empty block before fully verifying its parent.

However, it is important to note an incident that happened when blocks does not get fully verified. When BIP 66 (strict DER encoding of signatures) was implemented, some miners running the BIP 66 enabled Bitcoin Core versions were listening to pre-BIP 66 pools. One of the pool running a pre-BIP 66 version produced a block that had an incorrect block version number. The miner with BIP 66 started working on top of that unverified block by processing an empty block.

However, their bitcoind never accepted the full block as it was invalid. The result was building a series of empty blocks on top of the other that were ultimately not accepted by the network.


Where is the change from the output stored in? I'm learning that Bitcoin doesn't have a way to represent the account balance, but it's, rather, a sum of UTXO owned by the users of the private key.  Then where is the change from the output stored?

What I mean is, when the output of a transaction is used as the input of another transaction, it must be spent in its entirety. Sometimes the coin value of the output is higher than what the user wishes to pay. In this case, the client generates a new Bitcoin address, and sends the difference back to this address.

Does the change get stored back in UTXO?

When a sender creates a transaction, they explicitly define which pieces of bitcoin they spend. We call such pieces of bitcoin Unspent Transaction Outputs (UTXO) and you can think of the UTXO Set as the distributed ledger of Bitcoin's balances. The state of UTXO is ternary: they either don't exist yet, are available for spending, or have been spent. So, you can't deduct from them, but must spend them completely in one transaction.

Spenders explicitly pick the transaction inputs by referencing the UTXO via its unique outpoint txid:vout which is derived from the transaction that created the to-be-spent UTXO. Now the spender essentially has assignable balance to the sum of the inputs' total value. The spender will  explicitly assign the value of the consumed inputs to new outputs. Any funds not assigned are considered transaction fees and will be collectable by the miner that includes the transaction in a block.

This means the following hold true for (non-coinbase) transactions:

Σ(outputs) ≤ Σ(inputs)
transaction fees = Σ(inputs) - Σ(outputs)

So, to be clear, only the inputs and outputs on transactions are explicitly defined. The transaction fee is implicitly defined by the inputs and output.

It follows that a simple transaction sending to a single recipient will generally have two outputs:

a recipient output to conduct the payment
a change output to return the remaining funds from the inputs to the sender

I grabbed a random transaction from blockchair.com to visualize:

If Alice's wallet had not created the change output to itself, Alice would have paid 11,044.… BTC in additional fees. ;)

Note, that I'm simply guessing that the 610 BTC is the recipient output due to the round number, I'm not intimately familiar with this transaction.


How to use Bitaddress.org and Blockchain.info with Testnet coins? I was asking myself the same question posed at How to run a bitcoind on a hosting securely?

At the above posting, George Pearce provided a good suggestion.  However, I have questions but Stackexchange would not let me comment to George.

My questions are:

Bitaddress.org shows 8 addresses.  How does one generate hundreds of addresses?  How does one get the keys privately, without Bitaddress.org knowing about them and without sending these private keys through the internet from Bitaddress to me?  How does one generate testnet addresses?

I would need to use testnet coins while I'm developing and testing.  Blockchain (https://blockchain.info/q/addressbalance/1EzwoHtiXB4iFwedPr49iywjZn2nnekhoj?confirmations=6) and BlockExplorer (http://blockexplorer.com/address/mudBLTzFRz4o17Y9CbaWRB9Qr8BkFeYiYj) do not seem to work with testnet addresses.  Is there a service that does work with testnet?

In order to reach the testnet version of bitaddress you must append ?testnet=true to the url:

https://www.bitaddress.org/bitaddress.org-v2.9.3-SHA1-7d47ab312789b7b3c1792e4abdb8f2d95b726d64.html?testnet=true


how Bitcoin Benefits from giving u s currency(other then money from ads) Now, I have a pretty simple question to ask , How does Bitcoin benefit from giving us money for solving math problems? Another question is that why does it want us to do it? & is there a bigger purpose behind it???

"Bitcoin" is not a company. Bitcoin is an open-source project and a lot of people are working on it. And an open-source project does not need to get rich. The intention of a big part of that community is more like "changing something".

  How does Bitcoin benefit from giving us money for solving math problems?

You did probably not understand that "solving the sha256-algorithm (that's what solving math problems means)" secures the network by preventing double-spends.


BAMT Email Alerts Setup I have BAMT running on my rig but I don't think the email alerts are working, possibly due to a bad config.

I would like to use Google's SMTP server if possible (or any other free SMTP provider) but Google's uses TLS, which isn't supported in the BAMT configs I believe, so if this isn't possible (and no other free SMTP servers are available), how would I go about setting up my own SMTP server on the rig?

Thanks

Stick with Google and use STunnel to avoid TLS
There is a useful article describing how to get this to work here: https://groups.google.com/a/googleproductforums.com/forum/#!category-topic/apps/mail-settings/oCwPE2o_oCM
The relevant excerpts are:

You can use STunnel to allow non-SSL devices to connect.  STunnel
should be run on a computer on your network that is up 24/7.  The
network printers will connect to STunnel using non-SSL SMTP then
STunnel will bridge the connection to Google Apps using an SSL
connection.  STunnel can be downloaded at:
http://www.stunnel.org/
Your stunnel.conf file should look like:
-- begin stunnel.conf --
cert = stunnel.pem
socket = l:TCP_NODELAY=1
socket = r:TCP_NODELAY=1
client = yes
[pop3s]
accept  = 110
connect = pop.gmail.com:995
[imaps]
accept  = 143
connect = imap.gmail.com:993
[ssmtp]
accept  = 25
connect = smtp.gmail.com:465
-- end stunnel.conf --

It's worth reading around the rest of the information on the site
I tried STunnel and failed! What now?
Try using the sneaky printer backdoor to Google's SMTP servers that avoids SSL. Instructions are here: http://support.google.com/a/bin/answer.py?hl=en&hlrm=en&answer=176600
Relevant info is:

If your device does not support SSL, connect to aspmx.l.google.com on port 25.
You must configure an SPF record for your domain with the IP address
of the device to ensure that recipients do not reject mail sent from
it. You must also add this IP address to the Email Whitelist box in
your Google Apps control panel.
For example. if your sending device
sends from 123.45.67.89, add that address to your SPF record without
removing the Google Apps mail servers from the record: v=spf1
ip4:123.45.67.89 include:_spf.google.com ~all


What is the probability of generating 6 sequential blocks, less than an hour? I'd like to determine the probability of a fairly powerful miner (or pool) generating 6 sequential blocks in an hour. (so they would rebroadcast it later)

For example, given

Hash/second: X
A target of: Y
A probability of getting 6 blocks in less than an hour: Z

What is the probability that sequential 6 blocks will be created in

1 hour
1 Day
1 Week
3 months

I'd like to find the formula to determine this so I can graph the exponential difficulty of how much power an attacker will need to thwart the network.

There is discussion that Litecoin is more resistant to this type of attack, but so far it seems unfounded.  I'm looking for thought that would indicate otherwise.

I would first like to comment that there is widespread confusion about how double-spending works. In particular, the question you've asked here is irrelevant. I urge anyone who is seriously examining this issue to carefully read Analysis of Hashrate-based Double Spending, which also examines the effect of changing the average time between blocks.

For your question as is - do you mean

The probability that in a given hour, the miner will find at least 6 blocks? Or
The probability that the event "the miner finds 6 blocks in a row, without the other miners finding blocks between him" will happen in a given hour?
Or something else?

The first option is relatively easy - If the average time between blocks is T, the miner's proportion of the hashrate is q, and you're looking at a time period S, he will find on average (Sp/T) blocks, following the Poisson Distribution. So the probability this will be at least 6 is

1 - \sum_{x=0}^{5} (exp(-Sq/T) * (Sq/T)^x / x!)

For example, if q = 0.5 then that's 8.4% for 1 hour, and for 1 day it's 99.9999999999999999999999%.

I'll need to work out the 2nd option, but the answer to the easier question "What is the chance to find 6 blocks in a row starting right now" is of course q6.


Is it theoretically possible to have an inverted nLockTime? For example, an nLockTime == 500 prevents a transaction from being included in any blocks before the block 500.
Why isn't there a parameter like nExpireTime == 500 that prevented a transaction from being included in any block over the 500? Would it be theoretically possible to have one or it's a flawed approach for some reason?

This is intentionally not possible.
If a transaction would be valid in block X, we want it (absent double spend) to remain valid in any successor of X. This guarantees that (temporary, otherwise harmless) forks that result in small reorgs will never invalidate unrelated transactions - and they will just be able to be mined again in the new branch.
It also simplifies wallet assessment of incoming transactions. Imagine a transaction that was just confirmed in the last block where it would be valid. 1-block reorgs are infrequent, but not rare. You'd need special logic to detect this and factor the risk of a reorg that permanently invalidates the transaction into the decision of when to accept it. It's even worse for unconfirmed transactions, though there are other issues with those as well.


Crypto Exchange that Offers Withdrawal to Banks in Saudi Arabia I need any crypto exchange that offers withdrawal (cash) to banks in Saudi Arabia. There is one exchange that I know of is Fasset but it's still in its beta phase. I want to know if there's any other alternative to it.

I want to know if there's any other alternative to it.

Bisq
If no offers exist. Create offers. Users run the client on their machine, create their offers, decide their peers, No KYC and you have the keys and everything is decentralized including disputes.
If any issues use the links mentioned in the bottom-right of the website:


Bootstrap.dat on Mac OSX 10.9 - Difficulty Been trawling through a lot of information (I know this similar issue has probably come up a fair bit) on this issue and going round in circles a bit. I am not the most tech savvy individual, and would be really grateful if someone could has some advice that could save me time.

Here is where I am at:

I have a Mac running OSX 10.9.2
I have downloaded and installed the Bitcoin-QT. The synching process was just getting started and I have subsequently quit the application and downloaded the bootstrap.dat file - this torrent is currently downloading via the Deluge application.

Thinking ahead, I have read a bit about where to place this dat file once it has downloaded. For starters, I cannot seem to locate the ~/Library/Application Support/Bitcoin/ on my mac? and I also tried the /Users/username/Library/Application Support/Bitcoin but could not find anything. From selecting the 'Show Package Contents' for the Bitcoin-QT application itself, should I be creating a folder in here manually?

I'd massively grateful for any tips.

John

In the Finder, click the 'Go' menu and choose 'Go to folder' (or just cmd-shift-G)
type

~/Library/Application Support/Bitcoin/

in the field that appears, click go and viola. If you've never previously run bitcoin the directory won't be there but you can go to

~/Library/Application Support/

and create it.

the problem you were having trying to find it if you were using the Terminal to do so may have been that spaces have to be escaped in file paths, so the command to change to that directory would be

cd ~/Library/Application\ Support/Bitcoin

note the backslash before the space. As I've noted you know, you can also drag files or folders in to the Terminal and it will automatically enter the path to that file/folder.


What are Forward Blocks? Mark Friedenbach says "Bitcoin’s Block Size Can Be Increased Without Hard Fork".

Can someone ELI5 what are Forward Blocks?

From this week's Bitcoin Optech

  One well-known method for soft forking an increase in the Bitcoin
  block size is extension blocks—a data structure that’s invisible to
  nodes that haven’t upgraded to the soft fork and so is not subject to
  their historic limits on block size. By itself, this is an undesirable
  method for increasing block size because preventing old nodes from
  seeing the transactions in the extension block also prevents them from
  being able to enforce any other consensus rules on those
  transactions—such as rules that prevent a malicious user from spending
  other users’ bitcoins or from creating more bitcoins than allowed by
  the 21 million bitcoin subsidy schedule.

  However, one doesn’t need to increase block size to increase the
  amount of data that can be added to the block chain per minute—it’s
  also possible to increase capacity by increasing the frequency of
  blocks (reducing the average time between blocks). A method for gaming
  Bitcoin’s difficulty adjustment algorithm—called a time-warp attack—is
  well-known among experts and has been used successfully in
  demonstration attacks against Bitcoin’s testnet and real attacks
  against altcoins. (Note: although Bitcoin is technically vulnerable to
  this attack, it’d be a slow attack that would give the userbase a
  significant amount of time to respond.) By itself, increasing block
  frequency is also an undesirable method for increasing capacity
  because shorter block intervals increase the effectiveness of miners
  with large amounts of hashrate and so is likely to increase mining
  centralization.1

  Perhaps disproving the saying that “two wrongs don’t make a right,”
  this talk describes a novel way of combining extension blocks and the
  time-warp attack to allow both upgraded nodes and old nodes to gain
  the same capacity increase and see all the same transactions for
  validation while simultaneously slightly reducing mining
  centralization risk. Upgraded nodes would validate one or more
  extension blocks (called “forward blocks”) that provide additional
  block space with a centralization-reducing 15 minute average interval,
  but the upgraded nodes would also restrict the time stamps in legacy
  blocks to ensure a permanent (but limited) time warp attack increased
  the frequency of legacy blocks enough to allow them to include the
  same transactions that previously appeared in the forward blocks.

Video / Transcript / Paper


bitcond v0.12.1. "UpdateTip: 6 of last 100 blocks have unexpected version" I replaced my bitcoind from v0.11.2 to v0.12.1. Then I found "UpdateTip: 6 of last 100 blocks have unexpected version" in debug.log. This error occurs at new block generation. Can I ignore this? If not, how can I fix it?

I downloaded the new bitcond from

https://github.com/btcdrak/bitcoin/releases
https://github.com/btcdrak/bitcoin/releases/download/v0.12.1-addrindex/bitcoin-0.12.1-addrindex-linux64.tar.gz

Yes. You can ignore this.

This means that some miners have mined (still compatible) blocks with a version number unknown to Bitcoin Core.

Generally this indicates that some miners have mined blocks that signal non Bitcoin Core compatible soft- or hard-forks. Very likely a 2MB hardfork after BIP109 implemented by Bitcoin Classic.


Is RPC Miner still the preferred BTC mining software for a Mac? I'd like to get a sense of how impossible it is to mine BTC as part of a pool on a MacBook Pro.  I figured there was some mining software out there but Uncle Google only showed some stuff from 2013.  I eventually clicked around to something called "RPC Miner", which led to this link (http://uploaded.net/file/49dw65r3), which I sure hope isn't a virus.  Is RPC Miner still the preferred mining software of choice for Mac?

Mining bitcoin with a CPU/GPU is now basically impossible, the network is secured by ASIC machines that are many orders of magnitude more efficient than a CPU/GPU miner could be. You could plug your Macbook pro into a mining pool, but you will literally just waste money on electricity, and get zero payout in return.

Not only that, Macbook Pros (or any other laptop for that matter) are not build to be run as hard as mining requires. You run a serious risk of damaging your computer, with basically no chance of reaping a reward.

You will literally have better odds buying a lottery ticket with the money you would spend on electricity.


How do I recover/use an old wallet from 2011/2012 I heard about Bitcoin from the Security Now podcast back in 2011 and downloaded and started playing with the Windows client at the time from Bitcoin.org.  I think I updated the client a few times, but never really did anything with Bitcoin.  I did get a few partial Bitcoins from the old FreeBitcoins.appspot.com website and from others.  It looks like the last Bitcoin client I might have ran was v0.8.3 and my wallet is backed up from February 2012.

Can I somehow import this wallet (wallet.dat) into a current Windows client? I gather that the blockchain(s), etc. will need to sync up and it will take a lot of time.  I'm a newbie and haven't stayed involved in Bitcoin over the years.  So, I need a serious point in the right direction.

Thanks in advance for any/all help.

-0.NRG

It just works fine with the modern versions of the software with no changes necessary. Sync will take anywhere from a few hours to a few days depending on your hardware and connection speed. Make more backups than you think are necessary.


Bitcoin fork resolution - Fork losers download previous blocks 'til common block? When resolving a naturally occurring fork in Bitcoin, do the miners who were working on the orphaned fork download previous blocks from the miner who won the block reward that resolved the fork until they find a common block?

My understanding is that miners accept a new block as long as it is valid. As long as it's one block, they can just add it to their local version and start on the next block. However, if they receive a new block that is the head of a different fork that split off from their fork 10 blocks previously, how do the miners of the orphaned fork get the blocks from the other fork? How do they know to?

As soon as miners find a solution to the block header, they relay the block to the full nodes in their network. These full nodes will validate the block and will add the block that reaches to them first on top of the existing blockchain. Later, when they receive the other block at the same height, they will not discard it but maintain a copy of it. However, the nodes do not relay the block that was received later. Although the nodes assume that the block they received later must have lost the 'race', it keeps the “losing” block so that it has the information needed to reconverge if the “losing” chain ends up “winning.” So here you have a blockchain fork, where around half the nodes have a different version of the blockchain at the best height. When the fork is ultimately resolved when the next block is mined, the nodes can converge back because of the copy or the other block that they keep.

Chain reorganization with more than two blocks is rare unless there is a bug in the software like the one that caused one of the major fork back in March, 2013 that lasted 31 blocks.


What are the advantages and disadvantages of keeping bitcoins in an exchange versus a private wallet? What are the advantages and disadvantages of keeping bitcoins in an exchange versus a private wallet?

Exchange advantages:

Liquidity - you can quickly trade bitcoins for dollars, and vice versa.
Can hold dollars directly

Wallet advantages:

No reporting requirements
Can quickly get at your bitcoins

From what I understand it comes down to how you feel about security, to have a wallet stored privately means that you run the risk of equipment damage where you'll have to spend time on the recovery.

On the other hand you have the risk on network security, at least 2 exchanges have had high profile thefts occur in past years which have effected the market, exchanges make for big money targets and there's no real way to recover the funds.

Personally I think there is likely room for a hybrid solution between the two but I haven't seen anything yet.


I just need some advice or assistance if possible? I'd really appreciate anyones 2cents on this I sent BTC from Paxful to an exchange called LAtoken. $36 worth of BTC was sent, nothing major to anyone else but really huge to me. Cope pasted and confirmed address. NO btc arrived almost a day later.
When I check on the blockchain the address says
"This address has transacted 2 times on the Bitcoin blockchain. It has received a total of 0.00022816 BTC ($13.04) and has sent a total of 0.00022816 BTC ($13.04). The current value of this address is 0.00000000 BTC ($0.00)."
The exchange is not answering as well so I'm lost. So frustrated and wondering if the money is lost. I would love to just be sure.
here is the Txhash
9875516de2037143c60ae2bb84d3cf18678c0c906a9c712eddd36e65018f5d6f
here is the address
1J4TJDRuCvTJ9hCL7cXihtAZbM3THVKC6d

This is from LAtoken faq:

I can't see my deposit
If you have made a deposit to your LATOKEN account, but the amount is not
reflected in your balance, it might be caused by one of the following:

Deposit was below minimum deposit, please refer to min amount on
deposit screen. In this case, deposits are considered unrecoverable.

Deposit has wrong/missing memo - create a ticket and tell us the
correct memo, we will deposit it manually (may take up to 1 week).

Deposit was not yet processed on the blockchain. Here are the
approximate time frames after which you should create a ticket:

~30 minutes for ETH, ERC-20, NEO;
~1.5 hours for BTC;
~3 hours for NIMIQ, Mircoin;
~30 days for BAYR.

My guess is that your deposit is below minimum deposit but I don't have an account there and can't check; if not, you can send the transaction ID to their support following the link above and ask them to verify.


Do more miners imply less reward? I'm trying to understand the following:

There is a limited amount of mining reward for every currency and a precise amount is rewarded for every block a person wins per time. Since most people mine in pools technically the more miners or rigs there are in the world the less money an individual makes? Is this really how this works and if so how can it stay "profitable"?

Yes. More miners -> Higher difficulty -> Less chance of finding a block with a given hashrate -> less reward.

Long-term, it will only remain profitable for those who are more efficient than others.


Does a Bitcoin qr code become invalid after 1 Year? I have been trying to figure out if there exist a software which preserves a BTC QR code for more than one year.

Does a Bitcoin qr code become invalid after 1 Year?

Generally no. A Bitcoin QR code encodes a Bitcoin address. These addresses are valid forever - in the sense that valid Bitcoin transactions can be created which pay to those addresses. So long as someone still knows the original private key (or master private key) for the address, any money sent using that QR code in 5 10 or 100 years time, can still be used.


What's the easiest way for a third party to malleate a transaction? Let's say I am a node. A transaction has been relayed to me, and one of the scriptSig fields is:

<sig> <pubKey>

What is the easiest way for me to malleate this transaction?

For example, could I just add a "dummy" opcode to it, like this: OP_NOP <sig> <pubKey>?

Also, are certain types of scriptSig easier to malleate than others?

Basically, I'm interested in the most practical way a third party might go about malleating a transaction.

The easiest way to malleate a transaction is to just change the signature from Low-S to High-S and vice versa.


How do you hash data for mining? I was examining the block hashing algorithm and I tried to hash some blocks with my c++ sha256 to check results.

The hashes were wrong all the time so I thought I couldn't build the block header properly but then I took the data from wiki https://en.bitcoin.it/wiki/Block_hashing_algorithm and concatenated the values from the example and the result is still wrong (I tried it also in online sha-256 calculator so the function is ok).

Of course I must be missing something like coding but if I understand it right, sha is a function where you give a message and it takes the ascii codes of the message and does the math operations on these codes. But how can I pass a block header as a string? Or do I have to find an implementation of sha that interpretes the input differently?

I'm sorry, I know it's a noob question but this doesn't seem so obvious to me.

Edit:

The code is quite complex, but what I have at this moment is basically a made up block header that I packed in a string and for the example from the wiki page I mentioned above the string looks like

0100000081cd02ab7e569e8bcd9317e2fe99f2de44d49ab2b8851ba4a308000000000000e320b6c2
fffc8d750423db8b1eb942ae710e951ed797f7affc8892b0f1fc122bc7f5d74df2b9441a42a14695

I also have a sha function that takes a string as an input so the hash should be

1dbd981fe6985776b644b173a4d0385ddc1aa2a829688d1e0000000000000000

but it's

cf5397ae292d5d37a0df81aa7f89f9fc7e1c43329e441ce2294f0a72e542c7d9

I also checked it on http://www.xorbin.com/tools/sha256-hash-calculator so I think the code is ok but I must just be missing something here.

sha is a function where you give a message and it takes the ascii
  codes of the message and does the math operations on these codes.

Wrong. sha256 is a hash function. This means it takes data of (fairly, there can be a granularity) arbitrary length and returns data of constant length. In the case of sha256, the granularity is 1 bit (though the granularity of most implementations of it is 1 Byte; Thank you, dave_thompson_085) and the data it returns is always 256 bit = 32 Byte. No ASCII encoding required.

You feed your hash function the wrong data. You feed it a string containing the ASCII-encoded hexadecimal representation of the data you're supposed to feed into the function.

If you have a hexadecimal representation encoded in ASCII, you first have to convert it to the data it represents and then feed that into the hash function.


What is stopping pool managers to fake a miner? What if a pool manager introduces a miner that is not there and then uses the reward distribution?

The pool members will notice that the pool is not mining as many blocks as it ought to, given its supposed total hash power as reported by the manager, and that they are therefore not earning as much money as they should.  A certain amount of this could be attributed to "bad luck"; but over time, or if it becomes extreme, they can tell statistically that something is fishy, and then they will switch to other pools.


Bitcoin-cli sendtoaddress error Fallbackfee is disabled. Wait a few blocks or enable -fallbackfee I am following the documentation to perform transactions when I put the command:
bitcoin-cli -regtest sendtoaddress "xx address" 1.0
return:
Fee estimation failed. Fallbackfee is disabled. Wait a few blocks or enable -fallbackfee.

In my bitcoin.conf I enable this option in fallbackfee = true or enabled but nothing happed
this is my mempoolinfo:
{
  "loaded": true,
  "size": 0,
  "bytes": 0,
  "usage": 0,
  "maxmempool": 300000000,
  "mempoolminfee": 0.00001000,
  "minrelaytxfee": 0.00001000
}

I have read the other posts but I still don't have the solution, help.

fallbackfee takes a fee rate as a parameter, not a boolean. The fee rate is denominated in BTC/kvB. For a 1 sat/byte fee rate, you would do fallbackfee=0.00001.


Does Blockchain.info track IP addresses? I use Blockchain.info for my wallet, I use a secure anonymous email address.

My name and identifying information is never connected with my bitcoin, is it anonymous?

How can I keep my bitcoin wallets and usage anonymous?

Will Blockchain.info give up my IP address if "requested" by TPTB?

Should I be using TOR for all of this?

thanks!

Does Blockchain.info track IP addresses?

yes it does, see under Account - Settings - Logging

I guess that disabling logging only disables the DISPLAY of logging info on your side.

see https://blockchain.info/privacy:

  What we collect

  We may collect the following information:

Contact information including email address, skype or google talk username
iPhone or mobile device identifier
ip address
Yubikey or other two factor authentication toke

  My name and identifying information is never connected with my bitcoin, is it anonymous?

Not really...  See the Bitcoin.org FAQ
Generally speaking, I'd say it MAINLY depends on how you get / spend bitcoins.
If you pay for something with TC, and give your shipping address, that's your anonimity compromised!
Avoiding address re-use gives more anonimity...

  How can I keep my bitcoin wallets and usage anonymous?

It all depends on how anonymous you really want to be.
For example, do you use Google authenticator?
That add to security but certainly decreases anonimity

See also: https://blockchain.info/wallet/anonymity

  Will Blockchain.info give up my IP address if "requested" by TPTB?

Sure!

  We will not sell, distribute or lease your personal information to
  third parties unless we are required by law to do so.

(always from their "privacy" page)

  Should I be using TOR for all of this?

If you want more protection, yes.
But depending on the usage you do of your bitcoin, it might be useless, as you anonimity is already compromised in other ways.


How can one earn some Bitcoins with minimal skill requirements? This issue came up during a chat on this answer to a question asked by a new Bitcoin user.

Lets say I am new to Bitcoin and don't want to go through the hassle of exchanging money for coins quite yet. I don't have much of marketable skills, so I can't offer my services. How then can I earn some Bitcoins with minimal skill requirements, without any long-term commitment or investment of any type?

The most popular way to earn a bit of Bitcoins without any much skill is mining. The amount of coins one could earn is pretty small even with higher-end graphic cards, but through the use of mining pools and alt-coin mining one could get a small start in the Bitcoin world.

A website that offers small Bitcoin rewards for mechanical-turk-esque small tasks is CoinWorker. The skill requirement is minimal and the service provides value to people paying for the task.


Hourly price notifications on Linux I'm running Debian & Ubuntu and I've been using this script running in a terminal for a while but I find I easily get obsessed with the price. Instead I'd rather get, say hourly, desktop notifications.

Is there a simple way to do this?

Assuming your script is called btce_ticker.sh, the following line would do it:

while true; do btce_ticker.sh; sleep 3600; done

The sleep 3600 sleeps for an hour before looping around and running the script again.


Stealth address transaction example on Bitcoin's blockchain I am looking for an example transaction on Bitcoin's blockchain using stealth addressing.

I am brainstorming how stealth addresses would be used amongst normal addresses in combination (whereas Monero and CryptoNote protocols so far only use stealth addresses).

You cannot tell them apart from transactions using ordinary addresses; they are exactly the same.  Any regular transaction you look at could have been created using a stealth address.

As I wrote in my answer here, a "stealth address" is just one particular way of generating a unique address, known only to the payer and payee, to use for a transaction.  Once the unique address is created, the transaction itself is created just like any other.


Bitcoincharts API get mtgox bid value How do i get the mtgox bid , current_volume or other things using Bitcoincharts API?

for example:http://api.bitcoincharts.com/v1/trades.csv?symbol=mtgoxUSD

gives you the latest trades...but what if i want only the bid value how would i do it using the url above?

thanks

I don't think bitcoin charts is exactly what you're after. If you MUST use it then you'll find the information you're looking for at http://api.bitcoincharts.com/v1/markets.json however this includes all markets and not just mtgoxUSD (API overview is here).

I would suggest using the mtGox API directly, information can be found at the bitcoin wiki and this explains exactly how you could go about getting current volume etc.

To get the volume you would need to either look at the JSON displayed on this page http://data.mtgox.com/api/1/BTCUSD/ticker or parse it into whatever language you're processing this data with.


What is it mean Difficuly & prob when using vanitygen? I am running this command

$ vanitygen64.exe 1abcdefg
Difficulty: 778316249440
[125.17 Kkey/s][total 39015067414][Prob 4.9%][50% in 46.3d]

What is it mean Difficulty? I understand that higher takes more time, but what is the scale, why it is different from total? Why alphabet is more difficult than only digits vanitygen1234567`?
What is it mean 50% in 46 days, why it not tell me 100%. After 46 days, how much percent will be that it will complete in the next 46 days? If it is same reasons  as in Half-Life in nuclear physics I understand it.
The big question. What it is Prob 4.9%? Prob of what?

Difficulty tells you how likely it is that vanitygen will be able to find the address pattern you're looking for on the next guess. A value of 2n is twice as difficult (half as likely) than a value of n.
Because the process is completely random, it's impossible to give you a '100%' ETA. We can only estimate that, on average, you will find your key before some time period half the time (hence why 50% is used). Note that it re-adjusts the value to 75% once it hits that 50% mark (and re-adjusts again after hitting 75%, until the key is eventually found).
That is the likelihood that you would have found your key by now, from the time when you started generating your key.


Required conditions to be selected as intermediary node (Payment Service Provider) in Lightning Network? I bring up some important questions about terminology of the Lightning Network and how to select the intermediary node as the Payment Service Provider in a routing channel:

The following video (Link to video entitled: "How Bitcoin Lightning Channels Work") analogizes LN channels to abacus such that the channels are like rods including beads as bitcoin that slide from one end to the other, something similar to following figure (You can also find a similar article analogizing Lightning Network to abacus in this LINK):

Where, in this example, user A has 2 coins and user B has 1 coin.

This video also claims that:

  "There's no way to add more beads or take off a portion of the
  beads without taking the rod down all together."

And if this expression is correct, it means that the channel capacity is always equal to the channel balance, whereas, this answer (Link to answer) distinguishes between the channel capacity and the channel balance as follows:

  The capacity is the amount of Bitcoin provided to that channel.
  The balance encodes the amount of bitcoin which each channel partner owns in the channel. so the sum of the balances will always be the
  total capacity of the channel.*

Whereas, the video's description (i.e. "There's no way to add more beads or take off a portion of the beads without taking the rod down all together.) means that the capacity is always equal to the balance of the channel.

  As first question: Which expression is correct?

Meanwhile, according to the video, the condition for selecting an intermediary as the Payment Service Provider is as follows:

If users A and B have a direct channel A-B, and users B and C have a direct channel B-C, such that user A has 3 coins in the channel A-B, and user B has 2 coins in the channel A-B along with 1 coin in the channel B-C. Then, assume user A wants to send 3 coins to user C. The situation is like the following figure:

We now want to investigate if user B can be an intermediary as Payment Service Provider, according to the example mentioned in the video:

Although, user B has a direct channel with user C and in general has 3 coins in both channels A-B and B-C ; however, user B can send only 1 coin to user C. Meanwhile, the capacity of channel B-C is 1 coin, whereas the transaction amount is 3 coins that is more than the capacity of the channel B-C.

So, user B cannot be selected as Payment Service Provider (intermediary node) and users A and C have to establish a direct channel between themselves.

If the above expression is correct, we therefore can define the conditions of an intermediary node as follows:

(1) The intermediary node has a direct channel with either destination or another node that has all conditions of an intermediary node.

(2) If the amount of transaction is n coins, the intermediary node has at least n coins payable towards/in the direction of destination.

  As second question: Are the above conditions for selecting the
  eligible intermediary node as Payment Service Provider true ?

Note that this video is made by shitcoin paddlers trying to spread FUD. If I remember correctly the further episodes are much much worse.

  "There's no way to add more beads or take off a portion of the beads
  without taking the rod down all together."

This is false. It is possible to both add and remove coins from a channel. It's called topping up or splicing. Having all your coins on one "abacus" is pointless. So who cares if you have 10 channels that you close one to pay something onchain? (Possibly using the same transactions to re-open the channel immediately.)

  this answer (Link to answer) distinguishes between the channel capacity and the channel balance as follows

I think you're reading that answer wrong. Of course capacity is different from balance as capacity is one number and balance is 2 numbers. Also note that "capacity" is a nice thing to talk about when talking about the total capacity of the whole Lightning network (as sum of all channel capacities) but the capacity of a single channel is kind of pointless. I'd argue it's actually more informative to define a channel as having two capacities: one in each directions. So your first drawing would have 2 + 1 as capacities. With this definition you can talk about the capacity of one channel in a certain direction as well as the capacity of a whole path from payer to payee over multiple channels (and a different capacity in the reverse direction). The total capacity of the whole network would still be the same.

  So, user B cannot be selected as Payment Service Provider (intermediary node) and users A and C have to establish a direct channel between themselves.

False in two ways. 1) A can use this path for 1 BTC and send the rest over another path. 2) A and C don't have to connect to each other, they just need to have a few more channels. This is called Lightning Network after all.

  (1) The intermediary node has a direct channel with either destination or another node that has all conditions of an intermediary node.

Sounds correct.

  (2) If the amount of transaction is n coins, the intermediary node has at least n coins payable towards/in the direction of destination.

Yes. I'd even say "each intermediary node" (not "the") as according to (1) there can be more than one. But note that the payer always has the option of splitting "n" up into "n1 + n2", sending each over different paths.


Will we ever need smaller amounts of Bitcoin than a Satoshi? Will there ever be a need to create a unit of Bitcoin smaller than a Satoshi?

See also: What is a 'Satoshi'?

TL;DR: If transaction volume explodes, Bitcoin is adopted for micro-payments, and the value of bitcoins increases sufficiently, we will need greater divisibility.

First of all, since there are 100,000,000 satoshi to a bitcoin, obviously one satoshi would be worth $0.01 if one bitcoin were valued at $1 million.

Beside the questionable math in tysat's answer, his answer is based on the assumption that there are no use-cases for payments smaller than a cent.

I don't believe that it is a valid assumption to make:
Next to there being other currencies with subunits of smaller value than $0.01, when one satoshi is worth $0.01, that would also be the smallest possible transaction fee one could attach! This would be prohibitively expensive for any micro-payment based business scheme, such as for example Bitcoin based content paywalls, direct internet traffic payments to ISPs, or other automated micro-payment driven schemes: Paying five cents to read an article, you'd have to add a 20% fee.

Now, such services could possibly move off-chain where further precision could be added, yet that would require users to have accounts for each of those services, and to tie up their resources unnecessarily, while reintroducing counter-party risk; essentially reverting a lot of the key selling points of Bitcoin!

Assuming that the Bitcoin protocol will develop to scale even beyond the transaction capacity of today's credit card systems as recently suggested by Gavin Andresen, it seems plausible that business ideas will appear to challenge even such transaction capacity. As those would though be prohibited by a minimal transaction fee of $0.01, we could see a push towards even smaller fees.

Should the above lead to a scenario where somebody finds uses for payments with a value of a tenth of a cent ($0.001), and transaction fees for that should be less than 10% of the payment's value, we'd need smaller subunits if one bitcoin becomes more valuable than $10,000. Since we already have breached $1,000 once, that doesn't sound impossible.

Update 2017-03-23: AFAIU, adding further divisibility to Bitcoin would require a hard fork, and therefore is not something that will simply manifest. If necessary, it would require a massive overhaul of all software currently used in the Bitcoin ecosphere. On the other hand, Lightning actually already implemented support for probabilistic sub-satoshi payments.

Update 2018-05-17: Lightning uses millisatoshi to account for channel balances, adding another three magnitudes of precision. Payouts on the blockchain are rounded as the precision there is only to the satoshi.


Configure Bitcoin full node in my local LAN It is said that deploying a Bitcoin full node would protect the privacy of my Bitcoin addresses. If I configure a Bitcoin full node to be outbound only, would that be enough to protect me? Do i still need to have a public IP address? (Since no other full node will connect in, do i still need to configure/supply a public IP address?)

It is said that deploying a Bitcoin full node would protect the privacy of my Bitcoin addresses.

Only to some extent. It is true that at least some employees of any business providing custodial wallets know a lot about the person associated with each address in their wallets. It is also true that nodes relied on by a simplified payment verification (SPV) wallet also know more than normal about the wallet holder.
However there's information in the public blockchain which is amenable to some forensic analysis that a sufficiently resourceful person or organisation can use to penetrate privacy to some extent.

If I configure a Bitcoin full node to be outbound only, would that be enough to protect me?

I doubt it has much effect on privacy regarding addresses used in transactions.

Do i still need to have a public IP address? (Since no other full node will connect in, do i still need to configure/supply a public IP address?)

No.
You might want to investigate whether your router supports UPnP and the implications of that.


Creating a Bitcoin address using the 9 steps. Stuck on stage 2 I need to write a script using C++ and the OPENSSL library that takes this: 0250863ad64a87ae8a2fe83c1af1a8403cb53f53e486d8511dad8a04887e5b2352
performs a SHA256 Hash using the sha256 function from the OpenSSL library and then returns 0b7c28c9b7290c98d7438e70b3d3f7c848fbd7d1dc194ff83f4f7cc9b1378e98 as the digest.

The issue I am having is that I get a different message digest after performing the sha256 hash function: a9ce83de3a0ff3516b7c50cdd787e9f69f152f227d93c9512774231e7132e925.

I've been stuck on this for about 2 weeks and from my research I have been told that my function is not doing the right conversion of my message before performing the Sha256 hash function.

Code

string sha256(const string str)
{
  unsigned char hash[SHA256_DIGEST_LENGTH];
  SHA256_CTX sha256;
  SHA256_Init(&sha256);
  SHA256_Update(&sha256, str.c_str(), str.size());
  SHA256_Final(hash, &sha256);
  stringstream ss;

  for(int i = 0; i < SHA256_DIGEST_LENGTH; i++)
  {
    ss << hex << setw(2) << setfill('0') << (int)hash[i];
  }
return ss.str();
}

int main()
{

  cout << endl;
  cout << sha256("0250863ad64a87ae8a2fe83c1af1a8403cb53f53e486d8511dad8a04887e5b2352") << endl;
  return 0;
}

The problem is that you are hashing the string of hex characters instead of the actual bytes that the hex string represents. You should be using an array instead with the bytes specified. The following should work:

string sha256(char[] str, size_t len)
{
  unsigned char hash[SHA256_DIGEST_LENGTH];
  SHA256_CTX sha256;
  SHA256_Init(&sha256);
  SHA256_Update(&sha256, str, len);
  SHA256_Final(hash, &sha256);
  stringstream ss;

  for(int i = 0; i < SHA256_DIGEST_LENGTH; i++)
  {
    ss << hex << setw(2) << setfill('0') << (int)hash[i];
  }
return ss.str();
}

int main()
{
  char[] arr = {0x02, 0x50, 0x86, 0x3a, 0xd6, 0x4a, 0x87, 0xae, 0x8a, 0x2f, 0xe8, 0x3c, 0x1a, 0xf1, 0xa8, 0x40, 0x3c, 0xb5, 0x3f, 0x53, 0xe4, 0x86, 0xd8, 0x51, 0x1d, 0xad, 0x8a, 0x04, 0x88, 0x7e, 0x5b, 0x23, 0x52};
  cout << endl;
  cout << sha256(arr, 32) << endl;
  return 0;
}


C secp256k1: What is the purpose of the idiom '(void)data;'? The following code is contained in the file secp256k1.c:

static void
default_illegal_callback_fn(
  const char* str,
  void* data)
{
  (void)data;
  fprintf(stderr, "[libsecp256k1] illegal argument: %s\n", str);
  abort();
}

Could someone explain the purpose of the line (void)data;? I am pretty sure there is one, but I can't figure out what it is :(

Without (void) data;, gcc will complain about data being an unused variable. This is used throughout the codebase, especially for context objects, to deal with parameters which are required for API/consistency reasons but not actually needed.


What are the published Bitcoin addresses of the Binance 7000 BTC hack from 2019 May? Binance got hacked of 7000 BTC in May of 2019. I'd imagine all the chain analysis companies are tracking these tainted Bitcoins to see if it hits any exchanges for selling. What are these address? Is there a visual graph of where it has ended up?

This article on Coin Telegraph  claims that this is the transaction spending the 7074 BTC.  You can follow the amounts from there.  Here is a tree chart: https://www.blockchain.com/btc/tree/444776063


Lightning: why do we need decrementing timelocks in multi-hop payments? The video (at 28:25) from the official Lightning website describes a multi-hop payment. I understand what a hash-locked contract is, but I still don't understand why we need a timelock aspect here. As you see on the slide, in a multi-hop payment A -> B -> C -> D, (A -> B) has a 3-day nLockTime, (B -> C) has a 2-day nLockTime, and (C -> D) has a 1-day nLockTime. nLockTime of time t means that the transaction can not be included in a block earlier than t. So as time passes, first the (C -> D) becomes valid, then (B -> C) becomes valid, then (A -> B) becomes valid.

Joseph Poon says at 28:35 (emphasis mine):

  "Dave's and Carol's channel [...] closes first. And Carol is happy
  with this setup, because she knows that her payment closes out [...]
  before her money gets pulled."

Isnt's it the other way around: Dave pulls money from Carol first (between day 1 and day 2), and then Carol pulls money from Bob?

Anyway, what would go wrong if we got rid of timelocks altogether? Say, Dave generates a random R, sends H(R) to Alice, Alice creates a hash-locked transaction and broadcasts it to Dave via Bob and Carol. If Dave discoses R, everyone can withdraw their funds, if he doesn't, no one can. Why do we need timelocks on top of that?

I use the following scenario for both questions:
Alice wants to pay 1 BTC to Dave via the route:
Alice -> Bob -> Carol -> Dave

Why do we need timelocks?

Lets assume that the payment route has just been established. Meaning: Each hop in the route (A, B, C, D) has an HTLC with its neighbor hop(s). However, the HTLCs would not have any timelocks. Now Dave sends the secret R to Carol who in turn sends R to Bob. However, Bob doesn't respond (e.g. because his node crashed). Unfortunately Alice has no clue why Bob doesn't send R to her. So she has to wait until Bob becomes responisve again. Now that could take an hour, a few days, a few weeks or maybe he will never respond again. The problem for Alice is that the HTLC between her and Bob is valid indefinitely. So without a timelock the money committed to this HTLC may be stuck for a very long item and Alice cannot do anything about it.

What's the benefit of decrementing timelocks?

Decrementing timelocks are useful for intermediate hops (all hops other than the first and last one). In our example the route is:

 A -> B -> C -> D

So B and C are the intermediate hops. Now according to the HTLCs, an intermediate hop can claim money from the previous hop and has to pay money to the next hop. For example: Carol can claim money from Bob and has to pay money to Dave.

Generally speaking that means: A hop „HOP“ has to make sure that after the next hop „NEXT“ claimed the money from HOP, HOP will be able to claim the money from the previous hop „PREV“ before the HTLC between PREV and HOP is invalidated (timed out). And an easy way to do this is by ensuring that the HTLC-timelock between HOP and NEXT is (significantly) lower than the one between HOP and PREV.

Here's an example of what could happen if all HTLCs would have the same timelock. For this example we assume that the timelock is „T+10 blocks“ (T = a fixed block number). So when the blockheight is at T+10 blocks or later all HTLCs „timed out“ and:

Bob can reclaim his committed money from the HTLC with Carol
Carol can reclaim her committed money from the HTLC with Dave

Now after the payment route has been established the following happens:

After a delay (at T+8 blocks) Dave sends the secret R to Carol. By doing this he proved Carol that he can (legitimately) claim the money from their HTLC. As both parties don't want to close their channel yet, they update the channel state accordingly instead. By doing this, Carol has just irrevocably paid money to Dave.

However, Carol hasn't received any money from Bob yet. So she sends R to Bob. But Bob doesn't respond! This is unfortunate for Alice as in 2 blocks (~ 20 minutes) Bob can reclaim his money! To prevent this, Carol has to immediately close the channel with Bob by broadcasting the Committment Transaction that contains the HTLC. At the same time she also has to send another „delivery transaction“ that (intends to) actually transfer the money from the HTLC (between her and Bob) to herself. However, unfortunately there is no guarantee that both transactions are actually included in the next block (T+9). But if only the HTLC is included in block T+9, Bob can broadcast his own „delivery transaction“ that (intends to) transfer money from the now confirmed HTLC (via the output's „timeout path“) to himself. So now there are two „delivery transactions“ in the mempool that use the same HTLC-output. As we know, double-spending is not allowed. So only one of these transactions will be included in a subsequent block. And if Bob's transaction will be included, Alice will lose her money.

Having said all that, I think technically it would also be possible to do trustless multi-hop payments without decrementing timelocks. But this concept is probably much easier to implement and maintain..


Hashrate falls by factor of 1000x when now block is found? Very often my mining hashrate falls from the usual ~550 Mhash/s to about 400-500 khash/s, and I have noticed direct correlation in time with messages like these:

btcguild.com:8332 25/04/2013 10:07:14, long poll: new block 0000014d5c6c4f89

This happens across different pools. Stopping and starting the miner puts it back on the normal hashrate, but it means I have to look at the window 24h. I'm still very new to this but it seems like it switches to CPU mining? Why?

My setup is:

CPU i7-3770K
GPU HD 7970
16 GB RAM
Windows 7 64bit
Guiminer v2012-12-03

How long does the fall last?

It's so that when a pool receives a new block, it has to remove all transactions that have been removed in that new block from the pool of transactions it was trying to put in their block.

So what I guess happens (I never wrote or examined any mining software) is that your miner receives a notification that a new block is found and so knows that it makes no sense to continue trying to find a new block because it will contain already-confirmed transactions. It will then wait until the pool received the new block as well, pruned its own transaction pool and started again with distributing work among miners.

I think this process can really only take mere seconds.


Where is the string that generates the hash with 18-20 zeroes? When bitcoin miners mine, they have to solve a difficult and extremely repetitive math problem using the SHA256 algorithm. The miners are trying (basically playing lottery and almost always working in large groups) to get a hash with (currently) at least ~18.81 zeroes. (I put a decimal/float number because the value is inconsistent.) But, I want to put the hash into a hash function and get that super hard-to-compute number for a story I have where a superhero calculates this number. How do I get this string (nonce) that calculates to this zeroed hash and where do I find this on a block explorer, such as blockchain.com, or on bitcoin-cli?

If I undestend the your question,

This is an example of the proof-of-work algorithm.

The nonce is a component of the block, the strucure of the block contain the value, inside the blockchain.com you can find the value inside the propiety "nonce"

I hope I answered your question


Attack on bitcoin network with modified client? Scenario:

Mallory, Alice and Bob found block on their farm.
They disconnect from internet, simulating split and change all of nodes in their segment to malicious.
Malicious nodes decrease complication of block founding, and dramatically outrace whole of world.
After a week, they restore original clients on their nodes and plug the network back.
Their chain bigger than world's and they gather total week's bounty 25,200 btc, more than 2,520,000 $.

Is it possible?

What part of code protect us? Raw code is appreciated.

Related question:

Is the Bitcoin protocol secure if two parts of the network have no connection?

Scenario: disaster splits the Internet into dozens unconnected fragments

What would happen if a portion of the Bitcoin network was separated from the rest of the network?

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

Is it possible?

Yes and no.

The behaviour you are describing a normal feature of the functioning network, that is, the most difficult to produce (often but not necessarily the longest) chain will always win.

  Malicious nodes decrease complication of block founding, and dramatically outrace whole of world.

When the two networks rejoin, the second one having a lower difficulty, the new blocks would be instantly rejected. This is due to bitcoin looking for the most difficult chain to produce, not the ultimate highest block. A shorter chain with a higher cumulative difficulty is preferred over a longer, easier to product once.

Moreover, it would take a very large amount of computing power even just to ride the difficulty down. A single entity or group solving just a single block at difficulty 112M is unlikely, and they would need to solve up to 2015 of them to reach the next adjustment period. If they had enough hashpower to do that, they would be a lot better off financially just mining on the real network rather than attempting to attack it.


What happens if a country blocked external Bitcoin traffic? Say a country decides to completely sever itself from the outside world, like so. Assume no leaks. As I understand, once the local miners process all the international transactions in everyone's' mempools, they'll be left with only local transactions, blocks, nodes, and miners. A (long) while later the difficulty adjusts downward, and you now have a local, codeless, lower-POW "fork" of BTC, even though it's the same code-wise. Travellers can go there and spend their pre-fork balances there again, either sending it to another address they own, or send to locals, though it's obviously severed from whatever transactions they performed outside this country.

Assuming they keep up-to-date with the codebase only, and they do this for a long time, say a year and more, what happens once connectivity is restored? Is their local chain just completely wiped out due to lower POW? Would local nodes be forced to go back to the time of the fork and download international blocks? All those valid transactions at the time, gone? And roles reversed, what if this country amassed enough mining power to have more POW?

And as a bonus question, how would Layer 2 solutions, assuming they were the only traffic that could cross the border the whole time, affect this scenario? Could you load funds onto the Lightning network from both networks, and effectively double your balance by withdrawing them on the outside network?

Is their local chain just completely wiped out due to lower POW?

Yep. Lower proof of work means orphan, invalid chain.

  Would local nodes be forced to go back to the time of the fork and download international blocks?

Yes, because the chain they followed before they reconnected, has no value after the re-connection.

  All those valid transactions at the time, gone?

Yes. This is also why the 51% attack is bad. One with more hash power could

1) cash out their coins

2) publish the new, alternative chain with more PoW

3) start mining secretly again

4) repeat until the coin price decreases enough to make mining inefficient

  And roles reversed, what if this country amassed enough mining power to have more POW?

Then everyone loses money. This'll also indirectly affect Russia because of the changes in coin price.


Copy wallet to Electrum or Multibit? Is there a way to import my wallet from Bitcoin.org's client into the much lighter Multibit or Electrum?  The disk space & bandwidth consumption (not exactly well presented to a beginner) quickly made it unfeasible on home computers.

Speaking as one of developers on MultiBit, it is not currently implemented at the time of writing (Dec 2011) but there are serious development efforts to consolidate the wallet file format to suit all major Bitcoin clients.

Expect to see this functionality in Q1 2012.


Importing Electrum backup into Bitpay? Extremely new to Bitcoin but I'm looking to spend some of my balance on Amazon gift cards but I can't figure out why I can't import an electrum wallet backup into bitpay using file or phrase.  Tells me the file can't be decrypted or that the phrase is invalid.  Is this possible or is there a way around it?  TIA

Unfortunately, this is not possible, unless Bitpay allows you to import individual private keys, which, AFAIK, they don't.

Almost no wallets use the same wallet file format. They are generally incompatible from wallet to wallet and there is no standard (nor should there be). A wallet file is only good for the same software the made it.

Electrum's seed phrase is also incompatible with all other wallets as it uses a different algorithm to generate and decode the phrase. They do this since the standard way (BIP 39) is much less secure as it was primarily designed for hardware wallets.

Lastly, why would you move away from using Electrum? Electrum is, IMO, far better than any other SPV wallet out there, and especially better than the ones created by services like BitPay which rely on BitPay operating special servers in order for it to function.


Old bitcoin wallet not working So Im having a bit of a problem with my bitcoin wallet. See, I got into bitcoin about 2 years ago, back when bitcoins were worth very little real money, if any at all, but I managed to get quite a few. I recently found out they were getting bigger, so I tried to open bitcoin with my wallet, but it crashed, so I moved it from my mac to my PC. It said it was something like 200 weeks behind, so I waited, and now when its finally done, it says I have no bitcoins, but Im sure this wallet had some. Any ideas of how to get them back?

I tried getting my wallet onto blockchain, but I always get the error-
Unexpected end of file from server

Also, in my bitcoin qt, I dont actually have any addresses

Checkout pywallet. Its a python script that may be able to help you out. I've had similar issues with OSX clients in the past. You may also want to try finding an older version of the bitcoin-qt client for OSX and see if that works.

https://github.com/jackjack-jj/pywallet


Trade-offs in 2 of 3 multisig release transaction What are the trade-offs involved in:

Buyer and seller signing the transaction. HodlHodl signs the transaction only in case of dispute.

Vs

Seller and HodlHodl signs the transaction. Buyer signs the transaction only when dispute.

According to https://gitlab.com/hodlhodl-public/hodl-client-js/-/blob/master/multisig-spec.md

Server generates release transaction with output address taken from user's trading settings.
Server signs it's part of the release transaction input with it's private key.

Server signature is always goes first expecting client signature as next chunk.
Client decrypts it's seed with payment password.
Client signs the transaction with it's private key derived with index and sends back to server.
Service broadcasts provided transaction.

NOTE: In both examples below transaction is signed by seller.
Buyer has to sign transaction only if contract is disputed and resloved in favor of buyer.

Will the trade-offs remain same for any other similar bitcoin projects using 2 of 3 multisig?

To state the obvious in a 2-of-3 multisig escrow if two parties collude they can cheat the honest third party.

Buyer and seller signing the transaction. HodlHodl signs the transaction only in case of dispute.

In this scenario it is less work for HodlHodl and less trust/reliance on HodlHodl. You would choose this if you don't trust HodlHodl any more than the buyer and would rather only rely on HodlHodl in the case of the buyer becoming unresponsive.

Seller and HodlHodl signs the transaction. Buyer signs the transaction only when dispute.

In this scenario it is more work for HodlHodl and more trust/reliance on HodlHodl. You would choose this if you trust HodlHodl more than you do the buyer and HodlHodl are willing to get involved in a greater number of escrow releases. If they can avoid it HodlHodl would rather not get involved as when they do there is the possibility of mistakenly or maliciously releasing the money from the escrow when it shouldn't yet be released or releasing it to the wrong party.

Will the trade-offs remain same for any other similar bitcoin projects using 2 of 3 multisig?

Yes. As long as there are three keys being distributed to three parties there is this concern of two parties colluding to cheat the honest party. Note that some 2-of-3 multisig use cases distribute all three keys to the same individual so the individual can simultaneously protect their funds and offer redundancy in case the individual loses one of the keys. Other 2-of-3 multisig use cases (e.g. BitGo) give two keys to the same individual with BitGo keeping the third key. In this case BitGo can't steal the funds without obtaining an additional key from the individual.


How does a bitcoin transaction enter the network? I am trying to understand Bitcoin at a more fundamental level. I'd like to know how a new transaction enters and propagates across the network? I've read many Bob and Alice type scenarios where it's said that "the transaction is broadcast to the network". If there are many nodes on the Bitcoin network, how does the wallet know which node to initially broadcast the transaction to?

EDIT

Just for clarification, I'm referring to the process of sending from the client wallet (e.g. Mycelium on Android) to Node 1, before it gets propagated to all other nodes. How does my wallet know which node to send to first, or does it just randomly pick one?

I'd suggest you read this blog post about using the raw Bitcoin protocol: http://www.righto.com/2014/02/bitcoins-hard-way-using-raw-bitcoin.html

To answer your question, you should specifically read the "How to find peers" section of that post. Specifically this part:

  There's a chicken-and-egg problem, though, of how to find the first
  peer. Bitcoin clients solve this problem with several methods. Several
  reliable peers are registered in DNS under the name bitseed.xf2.org.
  By doing a nslookup, a client gets the IP addresses of these peers,
  and hopefully one of them will work. If that doesn't work, a seed list
  of peers is hardcoded into the client.

and

  The hardcoded peer list in the Bitcoin client is in chainparams.cpp in
  the array pnseed. For more information on finding Bitcoin peers, see
  How Bitcoin clients find each other or Satoshi client node discovery.


Bitcoin explorers don't show my addresses transactions I'm creating bitcoin addresses for a wallet we're building. To make sure the addresses are valid I went to a couple of bitcoin explorers and they reported, correctly, that the address does not have any transactions yet.

Great. But now I put in a couple of addresses from my existing wallets (Bread and Jaxx) which both have several transactions over the past year or so. Once again the explorers reported -- this time incorrectly -- that the addresses have no transactions.

The explorers I tried, with an example address that has transactions associated with it:

www.blockchain.com/btc/address/1LQs3i94JTJGimr2BiM929Zdhm1ShCatJR

insight.bitpay.com/address/1LQs3i94JTJGimr2BiM929Zdhm1ShCatJR

Why can't I see the transactions for this address?

Check that this is the actual address that you used to receive the Bitcoin in the past.

The default behavior for wallets is to generate a new address each time you want to receive funds. This means that if you simply opened your wallet, hit generate, and tried to scan that address, it will show 0 transactions. And, this is correct, because even though the wallet has received Bitcoin, that specific address hasn't.


Can transaction validation really be free? If you don't validate a transaction, then you are at risk for relying on it, propagating it, or including it in a block you're mining.  For this reason, the default behavior is to validate every transaction (I think!).  Otherwise there is some reliance on free transaction validation, which turns out not to be free because of the risks.  There is currently no simple way to pay for transaction validation in order to mitigate those risks.  I think there should be.

Some guys at Microsoft did some research into the idea of incentivizing transaction propagation (which would necessarily require validation for those getting paid).

I am wondering if it is worth it to develop an idea I had and present it to the bitcoin dev list.  It's called "bonded proof" and consists of a proof message which is a valid block (except that it's hash isn't low enough) and the TXOut that is the bond.  It isn't actual proof, but tentative proof that can be verified and, if found to be wrong, redeemed.  The bonded proof is signed by the bitcoin address that holds the bond. I imagine the TxOut would have to hold at least 100X a standard Tx Fee, but since it's not expected to ever be redeemed, it could hold far more just as a show of good faith.

If the proof is wrong, the maker of such a bonded proof can expect the bonded proof to be redeemed in a block.  The "transaction" that redeems such a failed bonded proof would need to include the entire proof message, plus an index into the block to identify the invalid transaction, plus a btc ("disproof") address to receive some part of the bond (say 50%).  Block validation would then have to verify that the identified transaction was actually invalid, and this would cause (say 50% of) the TxOut holding the bond to be transferred in the coinbase transaction, while the rest would go to the disproof address.

Miners would be free to ignore any such bonded proof, or to use them if and when they appear to be valuable, but I propose the following mechanism as a default:  The maker of a bonded proof ("weak") block would request a fee by making it the coinbase transaction in the weak block.  Miners would add a transaction sending that fee to the address in the weak coinbase transaction if they want to encourage the block assembler.  By default, any time a node has a brand new transaction to broadcast, it would make a weak block with the new transaction in it as long as the operator has specified a TxOut for the bond.

Selfish miners could turn this off if they wish to cheat those who assemble these blocks, just as they are already doing (probably because it's difficult not to) to those who propagate transactions.  I suspect behavior would be better than that.  Thousands of people have run full nodes without compensation, and this just makes it easier to reward them, and offload to them the time-consuming validation step, which they are doing anyway (by default).

Furthermore, non-mining nodes would have an incentive to validate these weak blocks in order to find an invalid transaction (root out cheaters who don't bother validating) and redeem the proof block.

The idea of bonded proof appeals to me not just in the case of weak block validation, but as a general mechanism.  It isn't called that with regards to the Lightning Network, but the idea is very similar: motivate helpful behavior while requiring that the helper stake some bitcoin on the claim that he is helping.

There is currently no simple way to pay for transaction validation in order to mitigate those risks. I think there should be.

This statement is incorrect. Transactions include a fee which the miner that finds the block will get. Therefore it's in the miner's interest to include transactions and thus validate them.

Once transactions are in blocks, it's in everyone else's interest to validate for themselves and they don't run any risk doing that. (They'd run a risk NOT doing that.)

There is currently no real problem of transactions getting stuck because "it's too risky to validate". There are a few miners that mine empty blocks, possibly for this reason, but more likely because of lazyness and misunderstanding. And that will become even less of a problem every time the block-rewards halve.


How is the construction of atomic swaps improved by Schnorr? How does the availability of Schnorr signatures improve the ability to perform cross-chain atomic swaps?

To perform an atomic swap, both assets need to be locked up to ensure the eponymous atomic execution of both payments or neither. Traditionally, this uses a complex output script that has two outcomes. On both chains, funds are locked such that either the receiving party signs with their private key while also revealing a preimage, or the original owner can take back the funds themselves after a timeout has passed by signing with their private key. This way, whenever one of the two parties reveals the preimage to take the funds, the other party can immediately take the funds on the other network. The drawbacks of this approach are that the two transactions are easy to link due to featuring the same lock hash, that the script is fairly heavy and that everyone sees what is going on.

Atomic swaps can be improved with Schnorr signatures both regarding their privacy and their blockchain footprint.
Instead of the previously described output script, the funds are locked to a 2-of-2 multisig address with a timeout condition to return the funds. To ensure atomicity, one of the two parties creates transactions on both networks that make use of "adaptor signatures". These transactions are fully valid except that the creating party's signature is damaged by a linear offset. The creating party provides a zero-knowledge proof to the counterparty that they are both damaged by the same value and that they otherwise would be valid. After the counterparty also signs both transactions, either party can fix the damage on one of the signatures to make the transaction valid, revealing to the other party the original offset and thus enabling them to fix the other.

Due to Schnorr's compact multisignature the 2-of-2 multisig address with the timeout fallback looks like a standard 1-of-1 Pay-to-Schnorr-public-key-hash address, and the 2-of-2 transaction spending from it also looks indistinguishable from any other standard transaction. The transactions are not visibly linked, third parties cannot tell which public keys were involved, and since it would be trivial to recreate the damage after having the two valid signatures, it's difficult for either party to prove that this exchange ever took place.

In result, Schnorr allows to perform atomic swaps by creating two standard transactions on each network, whereas previous atomic swap constructions made use of 2-of-2 multisig addresses and HTLC contracts which were much heavier and easily distinguishable.

For this to work, at least one of the two networks has to support Schnorr signatures (preferably both).

H/T Pieter for feedback and for linking me to this more comprehensive writeup by Kanzure: http://diyhpl.us/wiki/transcripts/layer2-summit/2018/scriptless-scripts/


Bitcoin/blocks folder up to 17gb So I have downloaded Bitcoin-QT v0.8.6-beta.
It has downloaded everything and now this folder:

C:\Users\user\AppData\Roaming\Bitcoin\blocks

is 17GB

Anyway to prune/delete something?

The 17 GB of data in your blocks folder is the blockchain. This is the public ledger of all transactions in the Bitcoin network, from day one. A full node needs all this data to check each new block that arrives from the network. As time goes on, the size of the blockchain will only increase.

There exist other clients such as MultiBit which do not require the full blockchain download. These are called SPV or Simplified Payment Verification clients.


What other wallets can import Qt's backup .dat file? I've been using Bitcoin Qt on my work computer (my only working computer at the moment) but last week Windows 7 decided that the program's bypassing the firewall to download the blockchain was a security risk and blocked it from doing so. I'm not the network administrator and fiddling with the firewall settings I can access hasn't done anything. While it is absolutely possible that I am missing some obvious solution, I've given up on fixing this. what I'd like to do now is download another offline wallet - one that does not need the entire blockchain - and import my Qt backup. I've tried MultiBit & Electrum, neither of which seem to work (although, again, it is possible that I'm missing something). Is there another program I can use? Should I wait until my laptop is fixed and just re-install BTC Qt on that? Am I out of luck?

You can use PyWallet, a simple tool for exporting wallet.dat files, to retrieve the private keys for your wallet addresses.

Most wallets nowadays can import private keys, which give direct access to all the funds in your backed up wallet.


How does blockchain.info associate a message with an address? I randomly encountered this address on blockchain.info: https://blockchain.info/address/1CzpppydnGN5dQN7iBnZbmm5RXreu7hrHW and at the top a message appears presumably describing the owner of the address. I have not seen this before. Is this just a feature of blockchain.info or is it a feature generally available in the Bitcoin system? And if so, how does this feature work?

This is known as "tags", and it is 'blockchain.info' specific. You can use any web page, or bitcointalk.org user profile or bitcoin-otc Id as link. Your link page should contain your address.

http://blockchain.info/tags


wallet software that doesn't require downloading the entire blockchain I find 99.999% of the blockchain irrelevant and a wasteful use of storage space in my personal computers. I just need it to sync my wallets.

on OSX what are bitcoin softwares that do not require downloading the entire blockchain? How can I find the wallet of my currently installed software (Bitcoin-Qt) and move it

Electrum wallet. Works like a charm on my mac.


Segwit to legacy address transaction possible? If I have a segwit address and I want to send BTC to the exchange, which supports only legacy addresses, can I even tranfer the money?

'Having a segwit address' dictates how you prove you received/own the money, not how you spend it. If you have a segwit UTXO, it's perfectly fine to create a transaction with witness inputs and then normal old P2PKH outputs, sending to 'legacy addresses'.


Should a casino manage its own Bitcoin wallet? Let's say I wanted to start an online casino that accepts Bitcoins.

Would it make sense to manage my own Bitcoin wallet for this site? Or would it make sense to just use a third-party service that manages the wallet for me?

What other considerations are there?

Integrating your casino with a 3rd party payments processor translates to much easier bootstrapping for your casino but also higher operating costs. Higher operating costs in turn means that your are by definition less competitive, as you will not be able to provide your users with a smaller over-round and also you won't be able to control the deposit and withdrawal costs.

Another thing to consider is security; having a 3rd part service deal with your money means that if they fail, you fail; if they vanish, your money vanishes with them.


Can we use fee rate less than 1 sat/vbyte? Is it possible to create, sign and broadcast a transaction with fee rate less than 1 sat/vbyte?

Yes, we can create, sign and broadcast transactions with fee rates below 1 sat/vbyte. However, it requires some workarounds and such transactions will most probably not be mined because most full nodes do not allow such transactions in their mempools.
minRelayTxFee is an option in the bitcoin.conf file that can be used to change the fee rate required for mempool inclusion as explained by Murch.

These are the steps for broadcasting a low fee rate tx which I found in a reddit thread:

Pair HW wallet to Electrum

Use the paytomany command to create a transaction with fee rate below 1 sat/vbyte

Import the transaction to sign in Electrum

Run a full node with minrelaytxfee set to 1 sat (0.001 sat/vB)

Find low-fee peers

addnode to connect with the low-fee peers discovered

sendrawtransaction to broadcast transaction

Check tx in block explorer: https://sochain.com/

Related PRs:
https://github.com/bitcoin/bitcoin/pull/13922
https://github.com/bitcoin/bitcoin/pull/13990
Related question: What is the smallest fee you can pay for an on chain transaction?
Related options in bitcoin.conf:
incrementalrelayfee : Fee rate (in BTC/kB) used to define cost of relay, used for mempool limiting and BIP 125 replacement.
dustrelayfee : Fee rate (in BTC/kB) used to defined dust, the value of an output such that it will cost about 1/3 of its value in fees at this fee rate to spend it.


How can a seed generate the wrong addresses? What happened:
I created a wallet with my backup seed.
Then I sent to the generated wallet addresses:

BTC: bc1q70shswq68tx5p2e2mms34up5jpxeqfyzp3let6

Everything was ok and I had access to my funds in the Coinbase Wallet App.
Then I wanted to send BTC back to Coinbase to trade it.
But I got the same error as the guy on twitter: https://twitter.com/scottyboi78/status/1357378323270291457/photo/1
Calculating the fees was actually not the problem.
Then I restored the wallet with my recovery seed multiple times on my iPhone. I also tried Android Emulator with Android Studio and the official Coinbase Wallet App.
The result is always the same:

BTC: bc1qgdw5aqhd8uz7rl4cxkkk66u33swsnmzl6aeaqg (something wrong)

How can it happen that the SAME seed results in DIFFERENT addresses for BTC!
That should not be possible!
Please help me I lost all my money and it is there in the Blockchain but I can't access it because the seed generation has a bug (I think at least)!

Once you use a BTC receiving address once, any good wallet will not display the same address again; they'll display the next address in the chain (since your seed derives to a large chain of different addresses). The coins are not lost, your wallet balance should still be there, and the wallet will still track the old address, it just won't display the old addresses by default to discourage reuse of the old address.


Ripple: How to calculate transaction ID (TXID) Given a signed Ripple transaction, how do I calculate the txid?


Where does the litecoin wallet store coins? I recently installed the official LiteCoin wallet on Ubuntu. I accidentally deleted it about 80% of the way through the synch, and reinstalled it, expecting it to resynch. It resumed. My address didn't change either.

So it seems that the wallet data is stored somewhere in the system. Is this safe? I reasonably expect my system to eventually implode, so I will need to backup/export my data somehow.

Where is the data stored, and how do I back it up?

On Linux, the default data directory is ~/.litecoin/. This is where the wallet, blockchain, configuration, etc. files are stored.

You can backup your wallet from File > Backup Wallet. This is the part that contains your private keys. See the pic:

You should encrypt with a secure passphrase (in Settings > Encrypt Wallet) before exporting your wallet. If you don't, the private keys in your backup will be unencrypted. As long as your wallet has been encrypted, your backup will be encrypted and you can safely* put it on Dropbox, Google Drive, email it to family/friends, etc. for safe-keeping.

*As safe as your passphrase is, so make it very high quality.