text:
BIP324 encrypted packet structure
I recently saw the BIP 324 proposal. It shows us there can be some privacy enhancement by using ECDH secrets and encryption algorithms such as ChaCha20 and AEAD-ChaCha20-Poly1305. The proposal includes:

The length decriptor size is reduced to 3 Bytes.
The command could be expressed as an ID (1 Byte) OR as characters (13 Bytes, by including the 0x00 byte selector).

However, I don't fully understand the order in data will be structured. Can it be explained ?
What algorithm will be applied to which data structure ? Because I can suppose the ChaCha20 is used in order to encrypt the payload size and AEAD-ChaCha20-Poly1305 to encrypt payload.

What do you mean with "the order"?

I mean the structure of sent data. For example: CommandId (1 Byte) + Size (4 Bytes)...

In the new P2P transport protocol proposed in BIP324, after the handshake (which among other things establishes encryption keys), packets have the following structure:

A 3-byte length descriptor (encrypted with FSChaCha20)
An arbitrary-length ciphertext which is the encryption of a plaintext (encrypted with FSChaCha20Poly1305, which expands the data by 16 bytes in the process by adding a Poly1305 authentication tag); the plaintext consists of:

A 1-byte header (which is used for signalling decoy data)
A variable-length contents (whose length is described by the length descriptor). The contents consists of:

A 1-byte or 13-byte message type (e.g. version, verack, tx, inv, ...).
A variable-length payload (the actual data sent in the message).

So if you want everything flattened out, you get:

3-byte encrypted length descriptor
1-byte encrypted header
1-byte or 13-byte encrypted message type
variable length encrypted payload
16-byte Poly1305 authentication tag

However, only 2 separate encryption algorithm invocations are used per packet:

The 3-byte length is encrypted using FSChaCha20, which is a variant of the ChaCha20 stream cipher that rekeys every 224 messages.
The header, message type, and payload are all encrypted together at once using FSChaCha20Poly1305, which is a variant of the ChaCha20Poly1305 AEAD which rekeys every 224 messages.

So, I have a new question: Why the command field isn't directly encrypted with the length through ChaCha20 ?

@Loopite Because we want as much as possible to be covered by the Poly1305 authentication tag (as that allows modifications in flight to be detected). Only the length isn't, because we need to know the length of a packet before we can decrypt/authenticate the packet. It would have been possible in theory to have a separate authentication tag for just the length, but that'd come at fairly high cost (an additional 16 bytes per packet), and not actually achieve anything (see footnote 23 in the BIP).

Yeah but why didn't you encrypt all the message (with length) with AEAD-ChaCha20Poly1305 then ? You'd still know the length by the way by decrypting it with ChaCha20 and then decrypt ALL the message (with the length again) with ChaCha20. You can also check the tag now by the way... This avoids encrypting 2 sections and now encrypts just one. This also protects the length by the tag.

@Loopite I personally believe that may work, but it is much harder to argue for its security, as it means using the same key/cipher for the length data (which has very weak privacy guarantees anyway, but no mac) as the actual payload (which has strong privacy guarantees, but also a mac). This is the reason why the OpenSSH chacha20-poly1305 uses two separate ciphers for length and data, and BIP324 inherited that design.


text:
What wallet formats are supported by Bitcoin Core?
When issuing the getwalletinfo RPC in Bitcoin Core, what are the possible results for the "format" field, and what do they mean?

Please elaborate. What do you mean by format?

When put in getwalletinfo, you have wallet name, wallet version, and format, can you tell me what the format should say, thanks

I don't understand what you mean by what it should be. It is what it is. The RPC reports what format your wallet it. It's not a means for detecting problems. The possibilities are "bdb" or "sqlite".

What is the differance between the two possibilities?

I've taken the liberty to edit your question to what I think you actually want to know, and answered it. Feel free to comment if this wasn't what you're looking for.

The "format" field in the getwalletinfo RPC output of modern Bitcoin Core releases reports what file format your the respective wallet file is in. The possibilities are:

"bdb": BerkleleyDB file. This was the only supported format up until release v0.20.x
"sqlite": SQLite file. This was added as an experimental option in release v0.21.0. It is only used for descriptor wallets, which are a new type of wallet, which won't be created by default.

In short, unless you created a wallet with version v0.21.0 or later, and explicitly chose to create a descriptor wallet, this RPC will report "bdb".
Wallets are created in one format, and stay in that format during lifetime. New Bitcoin Core versions will keep supporting both.

I have format "bdb cheers.

source: Stack Exchange

license: Creative Commons - Attribution Share-Alike - https://creativecommons.org/licenses/by-sa/4.0/

sort: votes


text:
Do you have to use a four gigabyte graphic processing unit to mine in 2021?
The reason why I'm asking is because i own a ASUS GeForce GTX 660 Ti 967Mhz PCI-E 3.0 2048Mb 6008Mhz 192 bit gpu and I've googled how to mine with it in 2021 but haven't found anything solid as of yet.

No, you have to use an ASIC to mine Bitcoin in 2021. A graphics card of any kind won't work.

fag liar shut up

all_licenses: Creative Commons - Attribution Share-Alike - https://creativecommons.org/licenses/by-sa/4.0/


text:
use of base64 signature in a transaction
I understand that there are two types of signatures, one DER format and another a compact type signature which includes a base64 format. In building a raw transaction how is the base64 format of a signature incorporated into the transaction. I know how to incorporate a DER encoded signature but need some help with a base64 formatted signature. Can someone suggest a python or javascript library that handles base64 signatures in building a transaction?

In building a raw transaction how is the base64 format of a signature incorporated into the transaction.

It's not, there's no base64 representation of signatures used in Bitcoin consensus or transactions.
Message signing using P2PKH with signmessage in Bitcoin Core and other tools uses a feature of ECDSA which was re-discovered after the creation of the software called pubkey recovery, this is frequently but not always encoded as base64 as a human compatible representation. It is not used anywhere else.

one DER format

The original releases of Bitcoin effectively used ASN.1 BER, and this was reduced to a strict definition of DER in BIP66. In effect we don't use ASN.1 all, but a very restricted subset of it due to consensus issues surrounding using a lengthy, poorly defined, and malleable specification.

I really don't understand why there is a move to make a currency so complex when the original intention was for it to alleviate the economic pain and hardship on earth.

Your misunderstanding of Bitcoin is hubris, not unnecessary complexity.

My understanding of what's going on with Bitcoin is right on target. That's why many other cryptos have come up. I just started researching Bitcoin a few months ago and it only took a couple of weeks to figure out that Bitcoin has been turned into something other than what it was initially intended to be.

@PeterWuille thank you for the explanation.

It’s not, you’re just incompetent and projecting.

That's projected back to you!!!Why don't you stop hiding behind anonymity - be real. You must be the main one behind keeping bitcoin from the masses.

I’m respected without needing an identity.


text:
Need help with a .conf file to run a lighting node?
This is my configuration file and i followed all of the instructions for the program but it always gives me the error message about something missing. I don't even know what programming language .conf files are written in. if someone can give me some guidance that would be much appreciated.

eclair.chain=mainnet
eclair.bitcoind.rpcport=8332
eclair.bitcoind.rpcuser=foo
eclair.bitcoind.rpcpassword=bar
eclair.server.port=9735
eclair.node-alias=<myalias>
eclair.node-color=00ff00
eclair.bitcoind.zmq="tcp://127.0.0.1:29000"

I got this code from https://medium.com/@crypto_coffee/how-to-set-up-a-bitcoin-lightning-node-b54733fbcb7f.
eclair.chain=mainnet
eclair.node-alias=”node-alias”
eclair.bitcoind.rpcport=8332
eclair.bitcoind.rpcuser=username
eclair.bitcoind.rpcpassword=password
eclair.bitcoind.zmq=”tcp://127.0.0.1:29000"
eclair.server.public-ips = [“xxx.xxx.xx.x”]
eclair.node-color=”ffffff"

Just replace the generic text with your computer's info.

Not sure about the eclair implementation, but in LND when running the node it looks for lnd.conf which is stored in ~/.lnd by default.


text:
Confused about POW
I'm pretty new to crypto and I'm confused about POW
POW Is usually explained like this...

A group of transactions are bundled into a memory pool (mempool).

Miners verify each transaction in the mempool is legitimate by solving a mathematical puzzle.

STOP!
How does solving the mathematical puzzle (finding the hash for the nonce) have anything to do with "verifying" the transactions? Isn't the the hashing puzzle just to keep miners from spamming the network? Thus, requiring work (and time to pass) to earn block rewards? Maybe I'm wrong here, or getting confused but isn't the verifying of transactions a function of signature verification with the public key? What does that have to do with the hashing puzzle??
When people say POW "secures" the network, what do they actually mean?

The first miner to solve the puzzle gets rewarded with newly minted bitcoin (the block reward) and network transaction fees.

The verified mempool, now called a block, is attached to the blockchain.

Your question may already have an answer on: What exactly is Mining?, or What are bitcoin miners really solving?

POW Is usually explained like this...

A group of transactions are bundled into a memory pool (mempool).

The usual terminology would be to say that: a group of transactions are selected from the mempool of the mining node, and they are bundled into a block.

Miners verify each transaction in the mempool is legitimate by solving a mathematical puzzle

In order for a transaction to be entered into the mempool in the first place, it must be a valid transaction. So the node will check the transaction to make sure it is valid according to the network's rules and current state.

How does solving the mathematical puzzle (finding the hash for the nonce) have anything to do with "verifying" the transactions?

It doesn't. Verifying/validating a transaction would generally refer to checking to ensure it is valid. Confirming a transaction would generally refer to it being included in a new valid block on the network.

When people say POW "secures" the network, what do they actually mean?

The energy spent hashing to try to find a new valid block is what secures the network. See this question for an explanation. The validation of individual transactions before they are included in a block template is not considered to be part of this.

The first miner to solve the puzzle gets rewarded with newly minted bitcoin (the block reward) and network transaction fees.

Yes, compensation for the security provided.

The verified mempool, now called a block, is attached to the blockchain.

Again, to nitpick terminology, the mempool is not turned into a block. Rather, transactions are selected from the mempool, to create a block candidate that is hashed, slightly altered, and hashed again, until a valid block construction is found. This valid block is then broadcast to the network, and will in most cases end up becoming a part of the blockchain history.

Ok that makes sense. BTW, I'm literally ripping these bullet points verbatim from this article: https://hackernoon.com/consensus-mechanisms-explained-pow-vs-pos-89951c66ae10

@GN. doing a quick skim of that article, I would say it is somewhat poorly informed / outright wrong on many points.


text:
What exactly is the data required when creating a coinbase transaction? How do I insert the blocks height into the coinbase transaction?
Still trying to write a function to properly create a coinbase transaction and the only thing I can't seem to get a hold on is..... How to get the block height provided by getblocktemplate into the coinbase transaction?  - which I create using the createrawtransaction rpc command. But the thing is, by calling the createrawtransaction and doing
[{"txid":"0000000000000000000000000000000000000000000000000000000000000000","vout":2147483647}]{" insert address ":6.25000000}

, I'd get a processed hash which is to be added as transaction 0 within the list of transactions before building the merklehash.
This is great but this wouldn't be a valid coinbase transaction as the block height is missing!! - Which is needed as the first 8 bytes of the scriptsig within the coinbase transaction.
So it got me thinking, What if the data field  after the address field is where I insert the blocks height?
While reading the Official Bitcoin Developer RPC API Reference, I came across a parameter within the createrawtransaction rpc command -- The key must be "data", the value is hex-encoded data and I thought maybe this is where I ought to fill in the height data .... which I would grab from here and maybe somehow parse it with this ; after which I then take the hexadecimal hash and insert it within the data field.

Note that Bitcoin doesn't have anything official. The website bitcoin.org is an information site about various aspects of the protocol and implementations, but the RPC documentation you're referring to is specifically that of the Bitcoin Core implementation.

The requirement of encoding the block height in the coinbase transaction is specified in BIP34. You may want to read the actual documentation there.
Specifically, it requires the scriptSig of the coinbase's (only) transaction input to start with a push of the height, encoded as a little-endian number. For current mainnet blocks (with height above 65535), the first 4 bytes of the scriptSig have to be [0x03, height % 256, (height >> 8) % 256, height >> 16].
It is not done as an additional output (as a data output would imply), and is not possible directly using createrawtransaction, which is aimed towards general-purpose transactions, not coinbases. Coinbases are generally constructed by mining software.

I am creating a mining software. So what you're saying is that I have to manually push the block height (little endian) into the scriptsig of the coinbase transaction.?

That's correct. You have to do several other things too, like creating a witness commitment as described in BIP141 if you accept segwit transactions, for example.

Thanks.... I'm guessing it won't be a pain to create a witness ? I wish these functionalities were more portable.

the first 4 bytes of the scriptSig have to be [0x03, height % 256, (height >> 8) % 256, height >> 16]. This threw me off..... Could you elaborate on this better?

The first byte has to be 0x03. The second byte has to have value (height modulo 256). The third byte has to have value (height shifted down by 8 bits, then modulo 256), etc.

jeez.... I thought it was just - first byte 0x03 then remaining 3 bytes little endian of block height.... Now it makes sense....
So if I follow these steps I won't have any issues ?  THANKSSSSS.......

That's the same thing. Yes, it is 0x03 plus the 3-byte little endian encoding of the height.

So you're saying that if I shift the first 4 bytes of the scriptSig by [0x03, height % 256, (height >> 8) % 256, height >> 16] ....... it would be the exact same thing as simply inserting 0x03 + blockheight data (in little endian) ?? Won't the hex of block height be 4 bytes?

So you're saying that if I shift the first 4 bytes of the scriptSig by [0x03, height % 256, (height >> 8) % 256, height >> 16] ....... it would be the exact same thing as simply inserting 0x03 + blockheight data (in little endian) ?? Won't the hex of block height be 4 bytes?

You have to use 3-byte little endian encoding of the height, not 4-byte, as prescribed by BIP34.

Any idea how to do that?

I explained it in my answer. You push the 3-byte value (height % 256, (height >> 8) % 256, height >> 16), which means prepending it with 0x03.

It is also equivalent to pushing the 4-byte LE encoding of the height but with the last byte removed (which will be zero until block 16777215; after that a 4-byte push will be needed, but that's only going to happen in 320 years).

It's all clear now. Thanks so much


text:
Adding instead of concatenating hashes in Merkle trees
Why aren't the hashes combined using a commutative operation such as addition instead of concatenating them? Any possible vulnerabilities or security flaws?
thanks for your time and efforts.

There are a number of issues here, with different answers.
Can Merkle trees use a commutative operation in general to combine hashes?
Yes, but only if they aren't intended to commit to the order of the leaves.
Clearly when a commutative operation is used, [A,B,C,D] and [D,C,A,B] will hash to the same thing. This is not a problem if the Merkle root is intended to be a commitment to the (multi)set of leaves, but it is if it is intended to be a commitment to the list.
Could the Bitcoin transaction Merkle tree have used a commutative operation?
Maybe, it's hard to talk about hypotheticals.
The order of transactions in a block is relevant (transactions can spend outputs created by previous transactions in the same block), so you want to prevent a peer from reordering the transactions to invalidate it without breaking the commitment. Obviously alternative solutions could have been used here, either by encoding the order explicitly, or by performing a topological sort on the set of transactions before verification.
Obviously this cannot be changed anymore in the actual Bitcoin protocol without a very invasive hardfork.
Can you use addition or xor as commutative hash combination function?
Not without security reduction.
Imagine a 2-element Merkle tree with leaf elements A and B. Their hash is H = hash(leafhash(A) + leafhash(B)). An attacker who knows A and B can use a generalized birthday attack to find other leaves C and D such that leafhash(C) + leafhash(D) = leafhash(A) + leafhash(B). Perhaps surprisingly, this only needs ~2128 work if leafhash is a generic (and secure) 256-bit hash function. By doing so, the attacker has managed to perform a second preimage attack on the Merkle tree construction, in only the square root of the time that would normally be expected for second preimage security.
There may be reductions in other security properties too.
Are there other feasible commutative hash combination functions then?
Yes, but they don't shrink the data.
For example, if the hashes are treated as integers modulo a large prime, then combining child hashes x and y as (x+y,xy) works (because the sum and product uniquely identify the inputs, but not their order). When working in a large characteristic-2 finite field (e.g. GF(2256)), (x+y,x3+y3) also works.
Another much simpler possibility is simply sorting the elements: combining x and y as (min(x,y),max(x,y)) works fine.
If using secure commutative combination functions doesn't shrink the data, then is there any point?
It means that you can prove an element is in the Merkle tree without revealing its position.
This is a minor bandwidth gain (log2(n) bits for a tree with n elements), reduces some implementation complexity, and may be a slight privacy improvement if the positions are sensitive. In fact, this approach is used in the proposed Taproot script trees (concatenating the hashes after sorting), precisely for the reason above.
Disclaimer: I'm a co-author of that proposal.


text:
Will taproot change public key generation?
Does taproot change how private/public keys/addresses are generated, or just how the transactions are signed? Also, I'd appreciate if someone could recommend me where to look for official sources of documentation for transactions building, since I'm developing a wallet application.

No, Taproot does not change how private keys and their corresponding public keys are generated. The same secp256k1 curve is used, and public keys are still points on that curve. What Taproot changes is the signature algorithm used for Taproot outputs and a few other script things. You can read the full specification in BIPs 340, 341, and 342.


text:
What result of this sagemath script?
My sagemath cannot compute the result of the following code for such a large number N. Can someone provide the result for the first 10 points ?
n=115792089237316195423570985008687907852837564279074904382605163141518161494337

K =  GF(n)
E = EllipticCurve(K,[0,7])
print(E)
print(E.order())
print(E.abelian_group())

for i in (1..E.order()):
    print(E[i], E[i].order())

Ok, running that code for you.
n=115792089237316195423570985008687907852837564279074904382605163141518161494337

K =  GF(n)
E = EllipticCurve(K,[0,7])
print(E)

Elliptic Curve defined by y^2 = x^3 + 7 over Finite Field of size 115792089237316195423570985008687907852837564279074904382605163141518161494337

print(E.order())

115792089237316195423570985008687907853269984665640564039457584007908834671663

print(E.abelian_group())

Additive abelian group isomorphic to Z/115792089237316195423570985008687907853269984665640564039457584007908834671663 embedded in Abelian group of points on Elliptic Curve defined by y^2 = x^3 + 7 over Finite Field of size 115792089237316195423570985008687907852837564279074904382605163141518161494337

for i in (1..E.order()):
    print(E[i], E[i].order())

Now, that won't work. To evaluate E[i], Sage would have to compute all 115792089237316195423570985008687907853269984665640564039457584007908834671663 points on the curve, put them in a list, sort them, and return the i'th element of it. The numbers are just completely infeasible to perform this with.
However, it's possible to achieve the same thing slightly differently: try X coordinates from low to high, and see if they have corresponding points on the curve, and print those. The output will be the same, but it'll run in reasonable time (as long as you don't actually want it for all points on the curve):
for X in K:
    if E.is_x_coord(X):
        for P in sorted([E.lift_x(X), -E.lift_x(X)]):
             print(P, P.order())

With as output:
(1 : 5647885500061325675748484062311156374277086380342947163834798608016077912256 : 1) 115792089237316195423570985008687907853269984665640564039457584007908834671663
(1 : 110144203737254869747822500946376751478560477898731957218770364533502083582081 : 1) 115792089237316195423570985008687907853269984665640564039457584007908834671663
(5 : 8431666291905083954801522372371357832158519650241434717544640703033853370223 : 1) 115792089237316195423570985008687907853269984665640564039457584007908834671663
(5 : 107360422945411111468769462636316550020679044628833469665060522438484308124114 : 1) 115792089237316195423570985008687907853269984665640564039457584007908834671663
(6 : 42020070001348706790142152499247364340931555193283231437254515282684880346805 : 1) 115792089237316195423570985008687907853269984665640564039457584007908834671663
(6 : 73772019235967488633428832509440543511906009085791672945350647858833281147532 : 1) 115792089237316195423570985008687907853269984665640564039457584007908834671663
(9 : 39862443989807251807276656820089717727772887583549899554895021886628471965623 : 1) 115792089237316195423570985008687907853269984665640564039457584007908834671663
(9 : 75929645247508943616294328188598190125064676695525004827710141254889689528714 : 1) 115792089237316195423570985008687907853269984665640564039457584007908834671663
(10 : 29483468331181912791030599117258770751379792607712291527986097186178047239105 : 1) 115792089237316195423570985008687907853269984665640564039457584007908834671663
(10 : 86308620906134282632540385891429137101457771671362612854619065955340114255232 : 1) 115792089237316195423570985008687907853269984665640564039457584007908834671663
...

Now, these are not the points with private keys 1, 2, 3, 4, ...; they're just the lowest X coordinates which have a corresponding point on the curve. Their discrete logarithm is not computable.

thank you for your comment. But you get different result. If result was E[5] it possible substract E[5] from any point on E, And you will get result point With order lower then order of point from what you substract !!! But with yours points example order is not changes !!!! This understand ? Look to this url:.     https://crypto.stackexchange.com/questions/89362/is-there-any-way-to-mapping-point-between-2-elliptic-curves

That has nothing to do with all of this. Orders don't get added or subtracted when you add/subtract points. The order is how many times you have to add a point to itself to get the point at infinity.

and how get point with order bigger or smaller then G , in secp256k1 ?

You cannot. secp256k1 is a prime-ordered curve. Every point (except infinity, which has order 1) has the same order, equal to the number of points on the curve.


text:
How do I fetch the price data from CoinGecko?
I don't understand their API: https://www.coingecko.com/en/api
It says:

/simple/price    Get the current price of any cryptocurrencies in any
  other supported currencies that you need.

But then you click it and it doesn't spit out any JSON at all. Instead, it shows a number of id fields and other things. I can't make it open the actual URL for displaying the Bitcoin price.

Here is an example that will give you the simple price:
https://api.coingecko.com/api/v3/simple/price?ids=bitcoin&vs_currencies=usd
The page lets you try out the API by filling in the form fields. You can get the list of coin ids from:
https://api.coingecko.com/api/v3/coins/list
and the compare currencies from:
https://api.coingecko.com/api/v3/simple/supported_vs_currencies

Link only answers are discouraged because they tend to be broken quickly.

I changed the answer to remove links.


text:
How to get private key and Bitcoin address in pure Python - without modules?
How to make a pure Python code for Bitcoin address and private key without modules? For now I learn only how from decimal to get a hex. How from hex to private key WIF and than Bitcoin address?
bits = 115792089237316195423570985008687907852837564279074904382605163141518111494336
bits_hex = hex(bits)
private_key = bits_hex[2:]
print(private_key)

With this code I get this fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8ccd3b50c0
I want to get this
5Km2kuu7vtFDPpxywn4u3NLpbr5jKpTB3jsuDU2KXjvkyQnjL4Q
and this
1FDV9PfvAnep8LEzNc7kqSjpxtWK3G3oj4
and compressed private key and address
L5oLkpV3aqBjhki6LmvChTCV6odsp4SXM6FfU2GpngUH5fdXyvH3
1HcYwYNpthRFqUCUhAtQfG3ZAX46uMSUux
Can someone to help me?

You will need to be able to do the following: SHA256 hashing & RIPEMD160 hashing (for the addresses and private key), Base58Check encoding (also for the addresses and private key), Elliptic curve point multiplication (for getting a public key from private key), and this post may help for uncompressing a public key if you use a library/solution for ECC that only gives compressed public keys.

You may choose to write your own implementations, but there are plenty of libraries available for you that already do these things. If you are trying to write all of it yourself, you are going to struggle with the Elliptic curve point multiplication step the most.

You definitely want to watch this YT video made by Shlomi Zeltsinger:
https://youtu.be/tX-XokHf_nI
It covers the topic of getting randomized entropy and using hashing and RIPEMD to get private/public key pair and corresponding address.


text:
How to know what wallet a Bitcoin transaction is at now
I have a question. Someone has taken/stolen bitcoin from me and I can see this transaction:
https://blockstream.info/address/1HFea6fugbV5cRG3dCgFgiDWtJL1xiTkki
How can I track to what bitcoin wallet and where that wallet is registered at?
With other words where does those 0.39 BTC exists now and how to know under what company that wallet is registered at?
Thank you!

Generally, you cannot.

How can I track to what bitcoin wallet

You cannot.

and where that wallet is registered at?

You cannot tell from the address alone,
Wallets are not "registered", anyone can download wallet software and run it on their phone or computer without registering with any organisation, without notifying any organisation, without creating an account.
Some businesses do offer wallet services where they create accounts for customers which they also call "wallets". So far as the Bitcoin network is concerned,  the Bitcoin shown is owned by the business, not by customers of that business. These types of wallet are called custodial-wallets because the business is the custodian of the money. In these cases, the customer really just has an IOU, they don't have money. Tracing movements of money in custodial wallets can only be done by those custodial businesses. You cannot identify the business from the address alone. If the business re-uses a deposit address for all its customers then other customers might recognize when someone else has paid money to the same business, but I doubt many businesses fail to change and rotate addresses to combat this.

With other words where does those 0.39 BTC exists now

No one really knows anything useful about this. This is the way Bitcoin was deliberately designed. It was intended that banks, governments and other organisations or individuals not be able to track or control Bitcoin. It was intended that Bitcoin be at least as anonymous and untraceable as conventional forms of cash. More so since Bitcoin doesn't have serial-numbers on banknotes.
The money you refer to was moved to 2 other addresses on 20th February
Hash     ae883ed70a09c9d2c2958fae2d177edfb49ca34d3ed158afed1ece19c3d1e497

From     1HFea6fugbV5cRG3dCgFgiDWtJL1xiTkki     0.39325252 BTC

To       37iCSADB6UMLf8FPLmWMBzFXY6g5dcG9gZ     0.16533000 BTC
         1CupwRfjYVe8gunFVv1jAGSGyziG46Pow      0.22778632 BTC
         Fee                                    0.00013620 BTC
                                               ---------------
                                               -0.39325252 BTC

This looks like a normal spend, where some money is sent to another person or business and change is returned to the owner of the money. A different return address is normally used for privacy reasons.

and how to know under what company that wallet is registered at?

You cannot find this out from the address or transaction details alone.


text:
Is there anyway to check if someone has a bitcoin wallet?
My son passed away years ago and it has been brought to my attention he may have bought a sum of bitcoin years ago.
Can someone please tell me how I can check to see if his wallet is still active?

You will have to look through his computers for Bitcoin software or files generally called wallet.dat.
In his papers, you're looking for anything labeled "Paper Wallet", or with QR Codes or long hex-numbers.
Good luck.

Perhaps you should also mention that coins could be stored on exchanges or e-wallets.

@VickiBidwell if you have access to his email accounts, you should also try searching them for any evidence of accounts on an exchange or e-wallet (as Pieter mentioned). I'm sorry for your loss, best of luck on your search.

license: Creative Commons - Attribution Share-Alike - https://creativecommons.org/licenses/by-sa/3.0/


text:
Unsure order of 12 word mnemonic
I have a 12 word mnemonic but I'm unsure of the order, I know that the BIP39 mnemonics use a checksum, are there any tools I can use to re-order the 12 words correctly so that they pass the checksum?

Is the checksum used for fixing the order or just for fixing typos / eliminating similar looking words?

@SergeiTikhomirov typos fixed by words being distant enough from each other. I would say check sums are for fixing order, mostly.

The bitcoin-explorer (bx) command at mnemonic-to-seed throws exceptions if the checksums don't don't add up.
When you find combinations of BIP 39 words that pass checksum tests, then perform an operation like this to identify Bitcoin compressed Bitcoin addresses that might have funds:
% echo "bunker wreck real edge inflict aerobic buddy mercy divorce wolf bright immune fat foot poet section sustain reveal unique reflect have latin problem chapter" | bx mnemonic-to-seed -p 123 | bx hd-new | bx hd-private -d -i 44 | bx hd-private -d -i 0 | bx hd-private -d -i 0 | bx hd-public -i 0  | bx hd-public -i 0  | bx hd-to-ec | bx ec-to-address -v 0
1Ec2nBkUMSQmmhxWeXMB98gFVCKTmHbRJb
Then examine the results of https://blockchain.info/address/1Ec2nBkUMSQmmhxWeXMB98gFVCKTmHbRJb to see if there was ever any wallet activity for M/44'/0'/0'/0/0.
This approach for older BIP 44 P2PKH addresses can be automated with scripts. This approach can also be extended to accommodate newer segwit-related BIP 49 P2WPKH-nested-in-P2SH addresses that begin with the number 3. The basis for doing so is provided below.
% echo "bunker wreck real edge inflict aerobic buddy mercy divorce wolf bright immune fat foot poet section sustain reveal unique reflect have latin problem chapter" | bx mnemonic-to-seed -p 123 | bx hd-new | bx hd-private -d -i 49 |  bx hd-private -d -i 0 | bx hd-private -d -i 0 | bx hd-private -i 0 | bx hd-private -i 0 | bx hd-to-ec | bx ec-to-public | bx bitcoin160
351d3fffea471eb3740a5661cf059b5eb73483dd
% echo "0 [351d3fffea471eb3740a5661cf059b5eb73483dd]" | bx script-to-address -v 5
35QwHbjUTo31tyTJruMPbrokCqjaTVdmTr

As I implied in my answer, I don't see anything in BIP39 that would imply that the order of the words is checksummed. Can you be more specific about "checksums don't add up" or "pass checksum tests"? If I'm right, the only way to test word order is the blockchain.info test with bx's output that you specified, or the input-into-HD-wallet test that I mentioned. Thanks for any insight...

Proper behavior:
% bx mnemonic-to-seed --language en rebel genius lunar mosquito pupil toilet web machine make stumble wear identify
bc1dc4505b7c258cd7a140d8ccc14d6a5bcd5313ad4c132d3db089e69845ae95a5bd43d43194a12036acf46a9a78c1f3a86d40f7cab8a0d6789365c5ab1497e7
Exception thrown:
% bx mnemonic-to-seed --language en rebel genius lunar mosquito pupil toilet web machine make stumble wear wear
The specified words are not a valid mnemonic in the specified dictionary.

At least one of those words, "en", is not on the BIP39 word list, so that would generate a "not a valid mnemonic" exception; I believe a count of 14 words would also. What I'm inquiring about is an exception generated by an incorrect word ordering.

That tells one that a bad combination of BIP 39 words were grouped together. Read https://github.com/libbitcoin/libbitcoin-explorer/wiki/bx-mnemonic-to-seed to see what the en argument does.

Right, I overlooked the "--" prefix on "language" ("language" is in the BIP39 dictionary!)  Sorry. But, copy-pasting the command from your reply above: $ ./bx mnemonic-to-seed --language en rebel genius lunar mosquito pupil toilet web machine make stumble wear identify
bc1dc4505b7c258cd7a140d8ccc14d6a5bcd5313ad4c132d3db089e69845ae95a5bd43d43194a12036acf46a9a78c1f3a86d40f7cab8a0d6789365c5ab1497e7

...And then I changed the word order and got the error! So I'll go back to the (mental) drawing board on the order issue. Meanwhile, any idea why you get an error but I don't on this particular word list?

With 12 words, there will be 12! (479,001,600) combinations of words.  Most of the combinations will fail.  Scripting is needed to run through the combinations to find combination that don't through exceptions. The seed word that don't throw exceptions are the ones that have their addresses checked to determine if any public addresses have funds. The needle in the haystack can be found with 12 seed words. It will take some time, possibly months to calculate and perform blockchain lookups to identify the proper seed word order.

Exactly so, although in the terminology of combinatorics the issue is permutations rather than combinations.

Have you tried btcrecover?: https://github.com/gurnec/btcrecover

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

As already suggested you should try the Seed Recover script.

all_licenses: Creative Commons - Attribution Share-Alike - https://creativecommons.org/licenses/by-sa/3.0/


text:
Mobile app for bitcoins?
Is there a mobile app that I can use to buy/sell bit coins? Would it be useful if I create one?

There is a lot of applications allowing you to easily trade bitcoin on your mobile phone. Almost every bigger Bitcoin Exchange has one. Take a look at cex.io, bitfinex.com and many more, they do have mobile apps already. There are also decentralized exchanges with mobile applications too. If you check https://coinmarketcap.com/rankings/exchanges/ you will see a quite comprehensive list of exchanges that we have already.
Another thing is that there is no such thing as an app for trading Bitcoin without having proper infrastructure, the trading engine that can handle large volumes and real-time trading, agreements with banks, special permissions, and licenses so my simple answer would be - no.


text:
Exporting private key from expired bitcoin address (now showing as watch-only)
Is there a way, in theory, to export private key from the bitcoin address (watch-only) that is now expired, but used once before? (even to get a different format of that key, numeric one instead of QR code used in the first place?). If everything is traceable, out of curiosity - has anyone ever managed to actually do this?

It is not possible to compute the private key for an address, ever, unless there are severe bugs in the wallet that holds the key.
Also addresses don't expire. For privacy reasons it is bad to reuse them, but their security does not depend on this.
In addition the "now showing as watch-only" in your question seems confused. Addresses don't become watch-only by being used; if it's watch-only it's because it has always been watch-only.

Well some obviously do expire on certain sites, for security reasons (some change after every week etc.) I understand the question might be confusing as I am also not an expert, I am trying to explain situation that I'm faced with and describing literally what I'm seeing from my end. Thinking that, because of the security measures set on that wallet (they have been changed after certain amount of time), could it also be that they - once imported in another wallet - become watch-only now?

@Zion I don't have enough information to say for sure, but my theory is that you have been scammed. Is it possible someone gave you an account, or let you import information in an account, and the  told you to deposit coins in it so that there is enough to withdraw? If so, the watch-only wallet was always watch-only.


text:
What version of C++ is used in Bitcoin Core?
I can't find the information on which C++ version is being currently used in bitcoin core project?
Is it decided for future releases somehow? How does the situation looks now?
The only thing I could find was Pieter Wuille's comment:

Bitcoin Core is switching to C++11 in the upcoming 0.13 release. Meanwhile, C++14 is already standardized and C++17 is well underway. Stating that Bitcoin Core always uses the latest features seems like a strange statement.

It may look like some XY problem, so the reason I am asking is my GF is long time C++ dev and I am looking for resources to learn C++ to be able to understand bitcoin code. Her first question was which C++ version it's written in, as it supposedly doesn't make sense to learn older versions.

See https://github.com/bitcoin/bitcoin/issues/16684 and the latest comment by MarcoFalke for the specific features (such as the filesystem).

"it supposedly doesn't make sense to learn older versions" I strongly disagree. Even learning C helps develop C++ acquaintance. And it's too early to consider C++11 obsolete. You might want to skip the parts calling the Boost library since they have "The long term future goal ... to remove Boost as a dependency" and replace it with newer C++ features

Thanks @darosior! Exactly what I was looking for. @MCCCS thanks for the suggestion.

Bitcoin Core:

v0.1.0...v0.12.x: C++03
v0.13.0...v0.21.x: C++11
v22.0...: C++17

What particular language features are used from C++17 or even C++11?

Lots of them, and which one changes from release to release. IIRC, in the first few C++11 releases some features were avoided because they weren't well supported on all compilers despite nominally supporting C++11.


text:
What would happen if you tweaked a public key with an odd y-coordinate?
From BIP341 this example code shows how you can tweak an x-only pubkey:
def taproot_tweak_pubkey(pubkey, h):
    t = int_from_bytes(tagged_hash("TapTweak", pubkey + h))
    if t >= SECP256K1_ORDER:
        raise ValueError
    Q = point_add(lift_x(int_from_bytes(pubkey)), point_mul(G, t))
    return 0 if has_even_y(Q) else 1, bytes_from_int(x(Q))

(The function lift_x will returns a point (x, y) with an even y-coordinate.)
My question is: what would happen if you had a secret key that produced a pubkey with an odd y-coordinate, e.g. 03af455f4989d122e9185f8c351dbaecd13adca3eef8a9d38ef8ffed6867e342e3, but then simply ignore the first byte (03) and passed in af455f4989d122e9185f8c351dbaecd13adca3eef8a9d38ef8ffed6867e342e3 to the taproot_tweak_pubkey function and sent funds to the resulting tweaked pubkey?
Would you still be able to spend the output via key path and script path? And if so, how?
And a similar question: what would happen if instead you actually did the point addition using the public key with an odd y-coordinate, e.g.:
Q = point_add(P_with_odd_y, point_mul(G, t))

Would the output still be spendable (from either key path or script path) in this case?

My question is: what would happen if you had a secret key that produced a pubkey with an odd y-coordinate, e.g. 03af455f4989d122e9185f8c351dbaecd13adca3eef8a9d38ef8ffed6867e342e3, but then simply ignore the first byte (03) and passed in af455f4989d122e9185f8c351dbaecd13adca3eef8a9d38ef8ffed6867e342e3 to the taproot_tweak_pubkey function and sent funds to the resulting tweaked pubkey?

BIP340 is a specification of Schnorr public keys and Schnorr signatures for Bitcoin. Every valid x coordinate on the secp256k1 curve has two possible y coordinates and so every secret key produces two possible Schnorr pubkeys (two possible y coordinates). BIP340 chooses the y coordinate that is even as the valid BIP340 pubkey with the y coordinate that is odd defined as an invalid BIP340 pubkey. This was a design choice when BIP340 was finalized but now that design choice is active on the network you have to follow it to generate valid BIP340 signatures that will pass the BIP340 signature verification algorithm. Every full node running Taproot rules will only accept Schnorr signatures that follow the BIP340 rules. If you don't follow them you will produce invalid BIP340 signatures and you won't be able to spend from that output.
You could in theory locally store the x coordinate or the odd y coordinate and still be able to recover from it but anything that goes onchain (pubkey encoded in UTXO, future attempt to spend from that UTXO) has to follow the BIP340 rules.

Would you still be able to spend the output via key path and script path? And if so, how?

No if you have to produce a signature and you don't follow the prerequisites of the BIP340 signature algorithm you won't produce a valid BIP340 signature.

And a similar question: what would happen if instead you actually did the point addition using the public key with an odd y-coordinate, e.g.:
Q = point_add(P_with_odd_y, point_mul(G, t))
Would the output still be spendable (from either key path or script path) in this case?

Same answer. If you don't perform the Taproot tweak as the BIP341 rules specify and the BIP341 verification rules expect then you will fail any future attempt to spend from that output. These are all essentially consensus rules that need to be followed and enforced to prevent network splits.


text:
Armory wallet setup
In the last week I have decided to buy bitcoin. Before last week I knew nothing about it or blockchain technology. Now I have some idea of what it is and its future potential. So I decided to buy a couple of bitcoins for now and just hold on to them.
Unfortunately it has been a bad experience. First I downloaded the Armory wallet since the reviews I read said that it was the most secure, and security is of course a big priority.
Then the Armory app constantly told me that it could not load the database. After a while I realized it meant the blockchain itself and so I went to bitcoin.org and downloaded Bitcoin Core, which as I'm sure you know downloads the entire blockchain, all 150gb of it, plus the Bitcoin Core wallet.
After restarting Armory it finally started to read the database and now seems to be working, although the bitcoins I purchased a few days ago have not appeared and I'm starting to fear I may have lost my money. But what I want to know is this:
WHY do I have to download the entire blockchain just to have an Armory wallet?
Now I am a blockchain node, which I never wanted to be. 150gb, that will only get larger and larger until my computer has no diskspace left.
All I wanted to do was download a wallet and get a couple of bitcoins. Secondly if everyone downloads the whole blockchain, that is forever growing, won't a time come when the entire Internet is nothing but blockchain!
So I went to Armory's website and their contact page and sent an email to contact@armorybitcoin.com but what do you know, I get a return email telling me the address doesn't exist. Hardly fills me with confidence. Anyway, enough of my rant, if any of you who are more knowledgeable and savvy than me can offer some advice or guidance I would greatly appreciate it.
I do believe this is the future, but the way I see it, if they don't develop the technology and make it more simple and user-friendly to set up a wallet and buy bitcoins then the general masses are not going to get into this. It's just too complicated and frustrating.

First let me answer your main question. You have to download and maintain the entire blockchain, because the security and privacy goals for which Armory was designed require an archival full node to be present on the same system.
Obviously, this is not the question that you really want to be answered. I think that one is: Where can I learn more about various wallets, to pick one that better fits my needs? I suggest that you take a look at Choose your Wallet on bitcoin.org.

If you want the security of a full node without keeping the complete blockchain around, you can try using Bitcoin Core in pruning mode.
If you want a lightweight wallet that runs on your own computer, I suggest that you give Electrum a whirl.
If you want to store a large amount of bitcoins, you might want to take a look at hardware wallets.


text:
What is the most accurate Classification Of Bitcoin?
What is the most accurate classification of Bitcoin as a piece of computer "software"?
would it be considered:
An Operating system.
An Application.
A File.
A Library.
A Network.
A Server.
Framework.
Assembly Level Code.
Application Binary Interface.
These are just the examples that came to mind at the time of writing.
Please feel free to improve the efficiency and effectiveness of this question.

Bitcoin is a digital currency. It is described as a "Bitcoin: A Peer-to-Peer Electronic Cash System" in the Bitcoin Whitepaper.
Bitcoin Core is a software application that implements Bitcoin.
Anyone can implement a software application to interact with the Bitcoin network (network of computers that all agree on the same protocol rules). So perhaps it is most accurately described as a network that follows a strict protocol similar to email. There are many email clients, but they can all communicate with each other.

Bitcoin is an experimental digital currency that enables instant payments to anyone, anywhere in the world. Bitcoin uses peer-to-peer technology to operate with no central authority: managing transactions and issuing money are carried out collectively by the network. Bitcoin Core is the name of open source software which enables the use of this currency.

See https://github.com/bitcoin/bitcoin/#what-is-bitcoin

Based on how people actually use it, it would be more accurate to describe Bitcoin as "a transaction-processing network" or "a speculative investment".


text:
Decrypting Bitcoin Wallet for Android
Does anyone know how to decrypt on a mac? I used openssl enc -aes-256-cbc -md md5 -a -in /Users/adriangonzalez/Desktop/bitcoin-wallet-backup-2019-06-26-22-20 -out ~/Desktop/file.txt, but the resulting file does not show mnemonic 12 words.
I'm using Bitcoin Wallet for Android.

Bitcoin Core has never existed as a mobile wallet app.

I found the answer seconds after I posted my questions. I was not writing the code right, here it is
openssl enc -d -aes-256-cbc -md md5 -a -in /Users/adriangonzalez/Desktop/bitcoin-wallet-backup-2019-06-26-22-20 -out ~/Desktop/file.txt
https://github.com/bitcoin-wallet/bitcoin-wallet/blob/master/wallet/README.recover.md


text:
How can I see or validate mining in regtest mode?
I can generate new blocks using generate number_of_blocks_that_you_want. I have 2 nodes running on regtest mode. I sent few coins from one node(wallet) to another. Transaction successful. Status it was showing was Sent and Received  in respective wallets for this transaction But not confirmed yet.  Now If I create New block i.e. mine new block then How can I see or validate that the transaction I have just created is included in the newly mined block? Just as we can see on Explorer. I can see that newly mined block has taken the transaction fess.But what about Merkle root and Merkle path?

Possible duplicate of Bitcoind, change to txindex=1

You can use the getblock <block hash> command to see the details of a block.

authors: عباس لا لی پور


text:
How many confirmations does a transaction needs to be included in a snapshot?
I bought bitcoin to participate in bitcoin hex. I sent my bitcoin to the electrum wallet and it has over 500 confirmations. Bitcoin Hex will snapshot bitcoin and I want my bitcoin address to be included in the snapshot. How can I find out if it will be included in the snapshot?

It looks like a scam to me.

That's the samething I thought. But I found out you dont have to give them money. So it cant be a scam.

@Luke101 scams extract value in ways that are not always obvious


text:
Fees for Multisig Addreses Twice as High as Standard Address?
Based on my research the cost to transfer funds from a 2/3 MultiSig address to any other address (be it a standard or MultiSig address) is approx. 2 x the cost of transferring funds from a standard address to another address since it consumes approx. 2 x the amount of data (147 bytes vs. 295 bytes) (pretty costly!).
A single output is roughly 34 bytes per output regardless of whether the output represents a standard address or multisig address. Is this correct? In other words, the higher price for a MultiSig only matters when it's being used as the input of a transaction, not the output?
If so, does the data size grow linearly with each additional signature? (i.e, what would be the approx. number of bytes for a 2/2 and a 3/4 MultiSig transaction)?
Thanks

A single output is roughly 34 bytes per output regardless of whether the output represents a standard address or multisig address. Is this correct?

Yes, in modern Bitcoin transactions the size of producing an output (ie, paying to an address) is constant and has no relation to the size of the actual script. For native segwit outputs the size is somewhat larger (42 bytes) due to a safer hash function being used, but this is still unrelated to the size of the script.

In other words, the higher price for a MultiSig only matters when it's being used as the input of a transaction, not the output?

Yes, the cost of using a larger multisig transaction is born by the person who owns the keys, which makes sense economically. In the original transaction type of Bitcoin (P2PK) this was not the case, and the additional cost was born by the person sending money, which didn't make a great deal of sense economically.


text:
How does the wallet know which outputs are available with LevelDB
So, I found that in the original Bitcoin client there was a member variable vSpent in the class CWalletTX, however it appears that this is no longer the case in the new version. I know that the new Bitcoin client uses UTXO DB to store the unspent transactions. My question is that since LevelDB is a key-value database, and the UTXO key is derived from transaction outpoint, how does the client find the Txs that belongs to the wallet owner? Does it iterate over all unspent transactions and find those containing the public key of the receiver?

The wallet is to a large extent separate from the rest of the node software. One of the reasons for this is because of the (slow) progress towards a working SPV mode. This means the wallet cannot depend on access to the UTXO set, as it won't be available in non-validating nodes.
However, it isn't needed. The wallet maintains an index of all input prevouts inside the wallet. Every output that is seen in a block, is to a wallet address, and which is not in this index as the input for another wallet transaction, is spendable.

Thanks. Does this mean that most transaction operations only happen within the wallet DB?

What are 'transaction operations' ?

Such as spending some coins, calculating the balance. I'm a bit confused by the IsMine method of a transaction. It returns Solver(scriptPubKey, scriptSig) result. Does this mean that before spending a transaction, it must be checked against all keys in the wallet?

Wallet operations like spending coins and calculating the balance only look at the list of wallet transactions and keys. As said, that's independent from the validation part. The UTXO set is only used for checking whether blocks and transactions are valid. Yes, IsMine checks against all wallet keys, but there are very fast indexes for that.


text:
Running out of disk space with Bitcoin Core
A year ago I purchased some bitcoins and it was sent to my address. I loaded up Bitcoin Core and installed it to my laptop HD, it ran out of space on the HD, mid blockchain sync. It has now been a year. I have confirmation that the coins have been sent to the address and they are there, what can I do?

I don't really understand what you problem is. Your bitcoins are on an adress und if you have the private key, you have access. Why is the space of your disc relevant?

I'm very new to this i don't really know what I am doing, I don't have the private key, only the address.

You will want to verify your last statement. Without the private key, you can spend as much of the coins on that address as I can.

if you have wallet.dat file you can get private key of that address and get access to your bitcoins.

How are you? WOW guessing you're rich now!
The proof you have bitcoin in your wallet does nothing. Bitcoin is not a system you can go and get your wallet back with showing them you have bitcoin in your wallet.
Go to blockchain.info and download the app. Click on add address. Scan your private key and then you can use your bitcoins again.
Hope you can gain access to your wallet.

Can I get my private key via bitcoin core? and then transfer it?

Any time you get your private key you can transfer your bitcoins.

A link that can help you to get your private key from bitcoin core:
https://bitcoin.stackexchange.com/questions/4203/how-can-i-export-the-private-key-for-an-address-from-the-satoshi-client

Hey do you know how to get the barcode like scan to show up on bitcoin core? I think i have it but can you get ones for public and private?

It's not in bitcoin core. I meant if you had a barcode of your private key you can do that. or if you have your private key, download a barcode creator and use it to use it in blockchain.info app.

Find your private key. Copy it and save it. Then use a barcode app to change your private key into a barcode.


text:
Why is no security lost by using 32-byte public keys in Schnorr signatures instead of 33?
There is currently a discussion on the mailing list about truncating the 33rd byte from public keys when used in bip-schnorr.
Public keys are (x, y) coordinates and compressed public keys simply replace the y coordinate with a single byte indicating its oddness. The complete y coordinate can then be derived from the given x coordinate, and so the public key can be expressed in just 33 bytes instead of 64.
By removing the "oddness" byte, public keys will only be expressed by the x coordinate, meaning there are two potential points on the curve that could be represented. This also implies that the same single x-coordinate-only public key could actually be derived from two different private keys.
My question is, why does this not affect the security assumptions of the Schnorr signature? Is it just a subtle effect, like replacing 256 bit security with 255 bit security?

From the (very recently updated) bip-schnorr draft:

Implicit Y coordinates are not a reduction in security when expressed as the number of elliptic curve operations an attacker is expected to perform to compute the secret key. An attacker can normalize any given public key to a point whose Y coordinate is a quadratic residue by negating the point if necessary. This is just a subtraction of field elements and not an elliptic curve operation.

The idea is that if somehow using implicit Y coordinates was less secure, then an attacker would always use it - even in the protocol version that has explicit Y coordinates. The attacker would take the full public key, strip the Y coordinate, run his (presumably faster) implicit-Y ECDLP solver on it to find the private key, and if the actual point corresponding to that key is the opposite of what he wants, flip the private key.
This proves that the ECDLP problem's hardness cannot meaningfully be impacted by removing the Y coordinates.
Now, at the same time you may wonder "But clearly, using only half of the private keys must give some reduction in security, even small?". The solution to this paradox is that it indeed helps attackers, but it already does that, even when the Y coordinate (or its parity) is included in the public key, because of the possibility to use the above technique. And in fact, the fastest known discrete logarithm solving algorithms for elliptic curves (for full X/Y coordinates) do exploit this fact.

This article expands on the security proof a bit more (with visual aids!)
https://medium.com/blockstream/reducing-bitcoin-transaction-sizes-with-x-only-pubkeys-f86476af05d7


text:
Bitcoin wallet security
If I use a Bitcoin wallet from say Bitcoin.com and Bitcoin.com folds, will I still be able to download the software and input my pass phrase to get my bitcoin back?

Welcome to Bitcoin.SE! You can help by marking answers as accepted once your question is answered so that the question does not remain as "unanswered".

You'll want to save the seed phrase mnemonic (likely 12-24 words long) that the wallet gives you when you first start it up. Doing so is very important!
If Bitcoin.com disappears tomorrow, you'll be able to input that seed phrase into any other compatible piece software. Many wallets use the same key derivation scheme.

To add to the above you can also find the option to backup the seed mnemonic via settings > bitcoin wallet > personal wallet > backup


text:
Bitcoin Core reports progress only up to 0.999999
On older version - after full synchronization in debug log i see message
progress=1.0
In new - only progress=0.999999, it`s normal or i have some problems with synchronization?

This is a rounding issue, and not new.
You are most likely fully synchronized.


text:
What are "confirmations"when selling Bitcoins?
Bitcoin confirmation. When and how do I make a conformation of a sale. Do I receive a emaIl from you when I sell.

It depends where you are transacting with the bitcoins. If you are on a website like coinbase and selling or sending coins. You might get an email from them depending if you have notifications on. This is a 3rd party that holds your bitcoin and has setup email system for it. But if you have your own Bitcoin wallet that is not controlled by a 3rd party company, you won't be getting any emails as the "bitcoin blockchain" isn't a 3rd party company.


text:
BIP91 is activated, why BIP141 is still dormant?
The moment is BIP91 activated non-SegWit signaling blocks will be orphaned. Since BIP91 is now activated won't that immediately boost BIP9 to 100%? Why is it not happening?

BIP9 only describes a new deployment method of softforks to the Bitcoin network. I therefore assume that you mean the deployment of BIP141 by method of BIP9.
The deployment of segwit requires 95% of the blocks of a difficulty period to signal readiness for it by setting bit1 in the version field. Since the difficulty period was already in the middle when segwit got such levels of support, it can only lock in during the next difficulty period at the earliest. The next difficulty reset will happen on the ~28th (from the top of my head, you can check on bitcoinclock.org). If it has 95% support in the difficulty period it will then lock in on the next difficulty reset ~Aug 11th, and then activate another difficulty reset later on ~Aug 24th.


text:
new Bitcoin Core (0.13.2) as Cold Storage Wallet?
What are the instructions (in GUI or CLI) to setup and use the new Bitcoin Core (0.13.2) as Cold Storage Wallet? OS is Ubuntu 16.04.

consider this:

start with a blank wallet (ie no transactions) you can do that by moving the wallet .dat file elsewhere, upon start bitcoin core will create a new one
encrypt your empty wallet (dont forget your password)
send money to the address(es) in the wallet
move wallet.dat onto a few usb sticks, put them in a safe
delete wallet.dat from computer permanently

that could be considered cold storage :)

Bitcoin Core does not officially support cold storage. That doesn't mean it can't be used for it, but if you don't know what you're doing you are likely to shoot yourself in the foot.


text:
Accepting cryptocurrency in Django app
i was thinking of using a service like blockonomics linked to an offline store via Xpub.
When a user signals their intent to make a payment, the app would generate a new address (API call), display it, set a timer for blocking the address, then use its HTTP callback to wait for Confirmed before updating the user balance. Without knowing the TX id I would poll the address and see whether the amount had been received since the timer started.
All payments go to a single cold address pool.
Is this a sensible secure way of going about this? What are the potential risks?

I wrote a very basic webshop using Armory that does a lot of what you're talking about, though in Flask:
https://github.com/goatpig/BitcoinArmory/blob/master/webshop/server.py
The sensible way to go about doing this would be to run your own bitcoin node so you can be notified whenever payment is sent to the address. You can, of course, use an SPV server (like an Electrum server) or even a public block explorer (blockchain.info, blockcypher) to get notified of payment to an address, but then you start risking customer (and your) privacy.
As long as the private key(s) are held offline, there's no actual risk of losing bitcoins. The big risks are from a privacy perspective and the way to combat that is to run your own node so you don't leak information.

Is this a sensible secure way of going about this?

I think so.

What are the potential risks?

Blockonomics could give you an incorrect balance, either accidentally or intentionally.
If you give them your extended public key to generate addresses, then giving them any private key from that extended key is the same as giving them the master private key to that extended public key. Solution: Don't give them any of your private keys.


text:
How can I reclaim my Bitcoin Cash from my Greenaddress wallet?
I'm new to cryptocurrency in general, and I'm still learning.
Let's say someone moves BTC to a multi-signature wallet with a trusted provider, i.e. Greenaddress, before the split from an exchange.
This now does not provide him with Bitcoin Cash too.
Can someone please explain the process of obtaining the Bitcoin Cash that goes with his wallet's Bitcoin?
It seems that one can move to a wallet that does support Bitcoin Cash.
But I'm not clear on the concept of the transfer of private keys/addresses from a wallet that does not support Bitcoin Cash to a wallet that supports Bitcoin Cash.
Is this possible, and how does it work?
Would this transfer happen by simply converting Bitcoin to BCC, or would the BTC holder keep the BTC balance and gain a BCC balance in addition?

Possible duplicate of I have Bitcoins in a local wallet, how do I get my Bitcoin Cash without using an exchange?

I think Greenaddress uses a multisignature setup, so a specific answer for Greenaddress would probably make sense here.

// , By the way, someone had a similar question here, which received a similar answer from the Reddit user named BitFast: https://www.reddit.com/r/greenaddress/comments/6qzstd/exporting_keys_from_greenaddress_to_a_bch/dl2pa6u/

// , @BJames, had you already considered GreenAddress's 2of3 recovery to an Electrum wallet? https://blog.greenaddress.it/2of3recovery/

Unfortunately, if your wallet/exchange does not support BCC, then you have probably forfeited it i.e. left it to their disposal. The only way to find out would be to message their support and see if it is supported. If it is, you will automatically have a balance of both. There are a few exchanges supporting BCC trade including bitrex.com (or have a look at coinmarketcap.com →     Bitcoin Cash →     Markets)

// , Why does not using the private key mean that it's forfeited? I don't see how they could generate the same private key as me on a separate chain.

If the exchange holds your private key they hold your bitcoin. Whoever had the private key before hand owns both coins

// , Oh, OK. I can see this as the case for exchanges, but not for wallets. The wallet maker does not have my BCC left "to there disposal" if they do not support BCC in their client. I thought you were referring to both exchanges and wallets, and it's how your answer reads, I think.

Unfortunately if you had a default GreenAddress wallet (2of2) it is too late - you had to move funds out prior to bcash being born as per the blog post.
This is because the bcash altcoin (rightly) uses an anti replay protection mechanism which prevents the bitcoin transaction to be replayed on the bcash blockchain. This applies for both transactions made from the wallet as well as the timelocked recovery ones.
If you used a 2of3 wallet you can technically make any transaction type you want (on either chain) but you will need to use ad-hoc tools (if they exist) or create a new program/script that does what you desire given 2 keys in the multisig - however this is not very simple and error prone.
GreenAddress can't take or use the bcash coins either because of the multisig.

// , Lawrence, thanks for the breakdown. Let's say I have a lot of bitcoin in a 2of3 GreenAddress account. Do you know whether anyone else is working on anything like the ad-hoc tools you mentioned?
I would be willing to start, if not.

// , May I know if there is a specific reason you did not suggest the 2of3 recovery? https://blog.greenaddress.it/2of3recovery/  I'm trying it out now with one of my accounts. :/

// , BTW, the instructions generate the following error on a fresh 16.04.3: E: Package 'python-socksipy' has no installation candidate. Maybe replace with python-socks in the 2of3 recovery instructions?

Hi - i think that version of Electrum is deprecated anyway because of Low S and those patches I don't think will work nicely with a recent version. GreenAddress recently released a new command line recovery tool, see github.com/greenaddress/garecovery

// , OK, thanks, Lawrence. Should I comment on the 2of3 recovery instructions (which, btw, are still linked from within the client) or will GA update those docs directly?

The blog pages regarding 2of2 and 2of3 recovery have been deprecated and now point to the new recovery tool. The clients will be updated soon.

@NathanBasanese - if you go over the greenaddress subreddit someone forked out garecovery tool to deal with 2of3 bcash, we reviewed it and did some preliminary test on it and seems to work (however be careful as the tool isn't provided by us and while now seems OK more commits could be added to make it malevolent)

NOTE: I have not tried these out, yet, as I'm still researching.
But given the time sensitivity of this question, I would like to post what I have so far:
Step 1: Make sure you are using a 2of3 GreenAddress "SubAccount".
You can find them in the GreenAddress interface under the heading Accounts in your Settings, as shown in the following screenshot:

Step 2: Follow the Recovery Guide that they mentioned to recover some Bitcoin from a 2of3 account to an Electrum wallet, all except for the last step, "send to another wallet".
https://blog.greenaddress.it/2of3recovery/
If I understood this correctly from a quick read, it looks like it imports seeds and generates appropriate private keys directly, rather than involving the Bitcoin network in any transaction.
Step 3: Verify that you have the same private keys in the Electrum wallet as exist in the GreenAddress wallet.
You should see your balances in an interface like this:
Step 4: Follow instructions to use Electrum Private keys to get BCH:
https://bitcoinmagazine.com/articles/beginners-guide-claiming-your-bitcoin-cash-and-selling-it/
 /\ Not just yet! /\
Before the send to another wallet ("And once you are connected you can go to the Send tab and recover all your wallet funds by sending them to another wallet of your choice.") step, sweep the private keys into a BCH wallet.
Step 5: Send the bitcoin in the subAccount from which you swept private keys into Electrum back to a new 2of3 GreenAddress wallet, or another Bitcoin wallet.
Further research/testing in progress, please comment

// , Make sure to sudo apt install cython, sudo pip install jnius, sudo apt install default-jdk and export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64 before you try this on Ubuntu 16.04.3. Once you have imported the GreenAddress 2of3 into Electrum, you can try copying the BIP39 seeds to Electron. Electron's wallet import won't work, AFAICT. https://hastebin.com/imituqanom.bash


text:
Bitcoin core unable to write cache to disk
I have been fiddling with this error for a little bit now and wondering what's going wrong. I'm running a testnet instance of Bitcoin Core on a relatively low-spec EC2 instance (2MB ram, 40gb disk)
It is unable to sync correctly. No matter the size of the dbcache and mempool, it will always crash before emptying it. There are no error messages in the debug.log, just the latest UpdateTip.
example with DBcache=4, mempool=5: 2022-08-15T13:25:48Z UpdateTip: new best=00000000781c1335e275cb33c0f16be3eb60c803482995f6fdf88fc1cc9cce8b height=21799 version=0x00000002 log2_work=48.609020 tx=33303 date='2012-08-30T16:51:17Z' progress=0.000525 cache=4.1MiB(22817txo) Killed  Increasing the dbcache/mempool will allow it to run longer but it will inevitably be killed in the same way.
More debug.log:
bitcoin@localhost:~$ bitcoind -testnet -rpcuser="user" -rpcpassword="password" -dbcache=20 -maxmempool=5
2022-08-15T16:04:02Z Bitcoin Core version v23.0.0 (release build)
2022-08-15T16:04:02Z Assuming ancestors of block 00000000000163cfb1f97c4e4098a3692c8053ad9cab5ad9c86b338b5c00b8b7 have valid signatures.
2022-08-15T16:04:02Z Setting nMinimumChainWork=00000000000000000000000000000000000000000000064728c7be6fe4b2f961
2022-08-15T16:04:02Z Using the 'x86_shani(1way,2way)' SHA256 implementation
2022-08-15T16:04:02Z Using RdSeed as additional entropy source
2022-08-15T16:04:02Z Using RdRand as an additional entropy source
2022-08-15T16:04:02Z Default data directory /home/bitcoin/.bitcoin
2022-08-15T16:04:02Z Using data directory /home/bitcoin/.bitcoin/testnet3
2022-08-15T16:04:02Z Config file: /home/bitcoin/.bitcoin/bitcoin.conf (not found, skipping)
2022-08-15T16:04:02Z Command-line arg: dbcache="20"
2022-08-15T16:04:02Z Command-line arg: maxmempool="5"
2022-08-15T16:04:02Z Command-line arg: rpcpassword=****
2022-08-15T16:04:02Z Command-line arg: rpcuser=****
2022-08-15T16:04:02Z Command-line arg: testnet=""
2022-08-15T16:04:02Z Using at most 125 automatic connections (1024 file descriptors available)
2022-08-15T16:04:02Z Using 16 MiB out of 32/2 requested for signature cache, able to store 524288 elements
2022-08-15T16:04:02Z Using 16 MiB out of 32/2 requested for script execution cache, able to store 524288 elements
2022-08-15T16:04:02Z Script verification uses 0 additional threads
2022-08-15T16:04:02Z scheduler thread start
2022-08-15T16:04:02Z HTTP: creating work queue of depth 16
2022-08-15T16:04:02Z Config options rpcuser and rpcpassword will soon be deprecated. Locally-run instances may remove rpcuser to use cookie-based auth, or may be replaced with rpcauth. Please see share/rpcauth for rpcauth auth generation.
2022-08-15T16:04:02Z HTTP: starting 4 worker threads
2022-08-15T16:04:02Z Using wallet directory /home/bitcoin/.bitcoin/testnet3/wallets
2022-08-15T16:04:02Z init message: Verifying wallet(s)…
2022-08-15T16:04:02Z Using /16 prefix for IP bucketing
2022-08-15T16:04:02Z init message: Loading P2P addresses…
2022-08-15T16:04:02Z Loaded 0 addresses from peers.dat  6ms
2022-08-15T16:04:02Z init message: Loading banlist…
2022-08-15T16:04:02Z SetNetworkActive: true
2022-08-15T16:04:02Z Failed to read fee estimates from /home/bitcoin/.bitcoin/testnet3/fee_estimates.dat. Continue anyway.
2022-08-15T16:04:02Z Cache configuration:
2022-08-15T16:04:02Z * Using 2.0 MiB for block index database
2022-08-15T16:04:02Z * Using 8.0 MiB for chain state database
2022-08-15T16:04:02Z * Using 10.0 MiB for in-memory UTXO set (plus up to 4.8 MiB of unused mempool space)
2022-08-15T16:04:02Z init message: Loading block index…
2022-08-15T16:04:02Z Switching active chainstate to Chainstate [ibd] @ height -1 (null)
2022-08-15T16:04:02Z Opening LevelDB in /home/bitcoin/.bitcoin/testnet3/blocks/index
2022-08-15T16:04:02Z Opened LevelDB successfully
2022-08-15T16:04:02Z Using obfuscation key for /home/bitcoin/.bitcoin/testnet3/blocks/index: 0000000000000000
2022-08-15T16:04:02Z LoadBlockIndexDB: last block file = 0
2022-08-15T16:04:02Z LoadBlockIndexDB: last block file info: CBlockFileInfo(blocks=0, size=0, heights=0...0, time=1970-01-01...1970-01-01)
2022-08-15T16:04:02Z Checking all blk files are present...
2022-08-15T16:04:02Z Initializing databases...
2022-08-15T16:04:02Z Opening LevelDB in /home/bitcoin/.bitcoin/testnet3/chainstate
2022-08-15T16:04:02Z Opened LevelDB successfully
2022-08-15T16:04:02Z Using obfuscation key for /home/bitcoin/.bitcoin/testnet3/chainstate: fb97b88490e524df
2022-08-15T16:04:02Z init message: Verifying blocks…
2022-08-15T16:04:02Z  block index              49ms
2022-08-15T16:04:02Z loadblk thread start
2022-08-15T16:04:02Z UpdateTip: new best=000000000933ea01ad0ee984209779baaec3ced90fa3f408719526f8d77f4943 height=0 version=0x00000001 log2_work=32.000022 tx=1 date='2011-02-02T23:16:42Z' progress=0.000000 cache=0.0MiB(0txo)
2022-08-15T16:04:02Z block tree size = 1
2022-08-15T16:04:02Z nBestHeight = 0
2022-08-15T16:04:02Z AddLocal(-:18333,1)
2022-08-15T16:04:02Z Discover: IPv4 - eth0:
2022-08-15T16:04:02Z Bound to 127.0.0.1:18334
2022-08-15T16:04:02Z Bound to [::]:18333
2022-08-15T16:04:02Z Bound to 0.0.0.0:18333
2022-08-15T16:04:02Z Failed to open mempool file from disk. Continuing anyway.
2022-08-15T16:04:02Z loadblk thread exit
2022-08-15T16:04:02Z torcontrol thread start
2022-08-15T16:04:02Z 0 block-relay-only anchors will be tried for connections.
2022-08-15T16:04:02Z init message: Starting network threads…
2022-08-15T16:04:02Z init message: Done loading
2022-08-15T16:04:02Z addcon thread start
2022-08-15T16:04:02Z opencon thread start
2022-08-15T16:04:02Z msghand thread start
2022-08-15T16:04:02Z dnsseed thread start
2022-08-15T16:04:02Z Loading addresses from DNS seed testnet-seed.bluematt.me.
2022-08-15T16:04:02Z net thread start
2022-08-15T16:04:03Z Loading addresses from DNS seed testnet-seed.bitcoin.jonasschnelli.ch.
2022-08-15T16:04:03Z Loading addresses from DNS seed seed.testnet.bitcoin.sprovoost.nl.
2022-08-15T16:04:03Z Loading addresses from DNS seed seed.tbtc.petertodd.org.
2022-08-15T16:04:03Z 62 addresses found from DNS seeds
2022-08-15T16:04:03Z dnsseed thread exit

2022-08-15T16:09:21Z UpdateTip: new best=000000000e74e1d0d23ec2ad5ea79b01df8a7f423c0f1676cdef2d21ec9f43cf height=56054 version=0x00000002 log2_work=52.424615 tx=93808 date='2013-03-08T16:20:21Z' progress=0.001480 cache=13.3MiB(85444txo)
Killed

2 GB, not MB, yes? Either way, the machine does not have enough memory to run Bitcoin Core and that's why it keeps getting killed. You could disable the mempool by running in blocks only mode. That would allow you to free up some memory for the dbcache.

Correct. This was my suspicion also but I've read numerous accounts of people sucessfully running core with 1gb (or sometimes even less!?), and here there did not seem to be any obvious relation to the size of the dbcache/mempool. Thanks.

What else is running on the machine that may be consuming RAM? You probably want a very lightweight OS, with little GUI/desktop things running on it. Also, testnet uses inherently more memory than mainnet as it has far more headers (probably ~300 MB just in headers alone).

OS indeed uses a decent chunk of the 2GB for reasons unknown. I resolved it using a swap file and core works fine now.

If you wish, you could either tidy up by deleting your question or (better?) add an answer describing how you solved the problem in sufficient detail to help others with the same problem.

@RedGrittyBrick Done. Will accept my own answer tomorrow.

I wonder if you have been able to sync the blockchain with such a few disk space (even for testnet, is that enough?). For mainnet I use an Amazon EC2 instance type of "tx2.large" with 750Gb of SSB disk and 16Gb or RAM. And I start bitcoind with -dbcache=8192 and -banscore=10

If Bitcoin Core continually gets killed before writing anything to your disk independently of your dbcache and mempool configurations and with no error logs in the debug.log, you are most likely lacking sufficient memory.
You can check if this is the case by monitoring your ram more closely sudo free -h
If your system allows for it you can create a swap file, which resolved the issue for me, along with the commands found here.


text:
Trying to receive a payment. Signed up for Bitcoin I don't know if I signed up for the right one
I think I just signed up for Bitcoin correctly. I'm trying to receive payments from an online casino that pays in Bitcoin. What do I need to do and what kind of wallet do I need to open, so I can receive my payment? Also, is Bitcoin used like a a bank where I can spend money out of it?

General tip: complete sentences and punctuation are always a good idea.

I think I just signed up for Bitcoin correctly.

I'm trying to receive payments from an online casino that pays in Bitcoin. What do I need to do and what kind of wallet do I need to open, so I can receive my payment?

To receive payment in Bitcoin what you need is a Bitcoin wallet.
There are several types of wallet available. Wallets are available as desktop software (full node and, SPV wallets) and, as a web service from certain sites.
For desktop wallets you can make your own choice, the official download of the software is on bitcoin.org. I have liked Bitcoin Core (which is a full node and requires to synchronize with the Bitcoin network before it will show all transactions) and Electrum (an SPV client wallet that is setup in seconds but, is not a full node).
Personally, I would always avoid web wallets since you must trust their security and it is a big, attractive target. Online services have been hacked in the past and much Bitcoin stolen.
A Bitcoin wallet on your computer is as secure as your computer, be sure to also keep a secure, private and, up to date backup of your Bitcoin wallet or passphrase. If you lose your wallet all of your BTC are gone and cannot be recovered. When using a web wallet it is not only the security of your computer at question, it is also theirs.

Also, is Bitcoin used like a bank where I can spend money out of it?

A Bitcoin wallet allows you to spend Bitcoin. It is more like a wallet than a bank. Online web wallet services are a bit more like a bank since you are trusting a third-party to hold your Bitcoin.
Note: If you are downloading software from other than bitcoin.org it might not be Bitcoin software or, it may be modified so that it is not trustworthy.

I don't quiet understand what you mean with "signed up for Bitcoin correctly", so I'm just assuming you mean having an address/private key pair that you now want to use.
You can use any wallet with an import function where you enter your private key, which allows you to send and recieve payments.

You need a Bitcoin wallet address to receive payments. Once they process your withdrawal you'll get a transaction ID which could be used for tracking the payment status. You will receive your Bitcoin in your wallet after sufficient confirmations. Once it reaches your wallet you can use it to buy altcoins or exchange it for cash in different exchanges, for example, Binance, Localbitcoins, Koinex, etc...

You need to create a cryptocurrency wallet. I use a blockchain.com. You can choose any other. When you create a wallet, you will have an address to send the payment. Bitcoins can pay for many services where payment is indicated in Bitcoins. You can change Bitcoins to dollars on the exchange.


text:
what is blockchain.info testnet api url?
there is a testnet for blockchain.info here but I can't find a url for calling api(s) in testnet as such we have in main network
on main network
https://api.blockchain.info/v2/receive?xpub=$xpub&callback=$callback_url&key=$key
and for example on testnet
https://api.testnet.blockchain.info/v2/receive?xpub=$xpub&callback=$callback_url&key=$key
is there anybody know where the testnet api url is?
Thanks,

Have you checked https://testnet.blockchain.info/api?
For instance, to get a raw tx:
https://testnet.blockchain.info/rawtx/tx_id

How to create new wallet address and send coins from one wallet to another in https://testnet.blockchain.info this API?  https://testnet.blockchain.info/q/addressbalance//mx9nK1Ty5uGvHcUCAXXHTMvkQC8pTNaKfr this one to get balance similarly how to exchnge coins?

is blockchain info API working? I'm trying to get some data using your endpoints, but I'm not able to.


text:
What does `log2_work` in Bitcoin Core's output mean?
I have a question.
Does the "log2_work" finally is a "proof de work" ? :)
Do you know what does it mean ?

It is the 2-logarithm of the expected number of block header hash attempts were necessary the build the chain up to that point.
For example, for block 768557, the log2_work is 93.909086. This means that roughly 293.909086 = 1.85973 ⨉ 1028 block hash attempts (each roughly a double-SHA256 operation) have been attempted.


text:
Does bitcoin have enough resolution to replace all other currency?
Does bitcoin have enough resolution to replace all other currency?
Bitcoin is intended to be used globally, and ideally it would be used in place of government issued currencies.  For the purposes of this question lets assume that all transactions in the world will take place in bitcoins and that all governments and people have accepted it as legal tender.
There are 100 million satoshis per bitcoin and 21 million bitcoin.  That means the total wealth of all bitcoins can be divided into 2,100,000,000,000,000 units.
If there are 7 billion people in the world then there are only 300,000 satoshis per person.
If each satoshi ultimately became equivalent to say a penny, that means that we can only have $3000 per person, which seems sort of limiting.  If we make each satoshi something larger than a penny (like $3.00), then each individual could have up to $900,000 in wealth.  But then there would be granularity problems (like having to charge $3.00 minimum for any item no matter how small).
The granularity problem gets even worse since prices for mass produced items (like small electronics components) are often specified in units as small as 1/100 of a penny.
Clearly there is a resolution problem that will only get worse over time.  To estimate the required resolution we can consider the following.

need to account for very small prices (as small as 1/100 of a penny), so 10,000 units per dollar
need to account for reasonable wealth (say $1,000,000 per person).  Not that I expect all people to have that much, but wealth is not evenly distributed, and we wouldn't want to be even close to hitting the cap.
need to account for population growth (say up to 20 billion)
need to account for lost coins (say at least half are lost over time).

$1,000,000 per person * 10,000 units per dollar * 20 billion people * 2 = 4E20 units needed.  This would require at least 69 bits.
4E20 / 2.1E15 = 190,476.
So it looks like the resolution of bitcoins smallest unit will ultimately need to be at least 200K smaller.

relevant https://bitcoin.stackexchange.com/questions/69700/what-is-a-millisatoshi-i-thought-satoshi-is-the-smallest-unit and https://bitcoin.stackexchange.com/questions/83475/what-makes-millisatoshi-real/83479

When it becomes necessary, the resolution can be changed pretty easily. It's just not a big problem yet.

The question is good (and has been asked before) but contains a misconception
No one buys rice a grain at a time

The granularity problem gets even worse since prices for mass produced items (like small electronics components) are often specified in units as small as 1/100 of a penny.

Sure, but you will never order just one 120 ohm 0402 SMD resistor from Mouser. You always have to respect the minimum order quantity. You never ask your bank teller to hand over a coin worth $0.00001 so that you can pay Mouser. Your credit card company or bank never has to track account balances to hundredths of a cent. The monetary system you use today also doesn't have currency units as small as that. It isn't a real-world problem. People can and do buy those 0402 SMD resistors using a currency system whose smallest unit isn't small enough to buy just one.
So this issue has no practical effect on the lowest denomination coin available in the currency. A one cent coin is a smaller amount than you'll ever need for any real-world transaction.

Satoshis may be too big?

If there are 7 billion people in the world then there are only 300,000 satoshis per person.

This is indisputable. However there are solutions.
MCCCS pointed out that the Lightning network can already be used for transactions smaller than a Satoshi.
The general view seems to be that the Bitcoin protocols, or related payment systems, can be adjusted in a timely manner to provide for higher resolution in advance of any requirement for it.


text:
What are the major technical differences between Bitcoin and Bitcoin Cash?
For a research project I'm trying to detect the major technical differences between Bitcoin and Bitcoin Cash. I know that BCH uses a larger block size and does not support SegWit. But what other differences are there?
I know this is a broad question - I'm looking for an overview only, not an exhaustive, detailed list.
In particular, but not exclusively, I'm interested in:

Which features are only implemented in one of both chains?
Do the data structures differ (blocks, transactions, inputs, outputs)?
Is there a difference in which script instructions are supported?
What about addresses and address types?
Do both chains commonly implement the same BIPs or are BIPs usually exclusive to one chain? Is there a list of which BIPs are implemented in which chain?
Overall, what's the best approach to track past and future changes in both chains? Can you recommend any resources on that issue?

Finding differences by looking at the code does not seem practical to me given the time it'd take me to pinpoint and understand all changes. I used git log --oneline master --reverse on both chains and diffed the results to get some insight, but it's still hard to detect changes that are relevant to me.

Bitcoin

Has SegWit and it's benefits and costs:

Code complexity (of acceptable amount)

Witness data is discounted in SegWit transactions, somewhat rectifying the fact that outputs are cheaper to create than to spend.

3rd person malleability fix for SegWit transactions

RBF transactions (optional, destroys 0-conf)

Compact Blocks

Ability to soft-forks to introduce new opcodes for SegWit transactions.

Quadratic hashing fix for SegWit transactions

Bech32 address format bc1... for SegWit transactions.

More secure P2SH addresses is Bech32 is used (no 160-bit hash function)

Signature covers value for SegWit transactions (useful for hardware wallets)

A longer list can be found here
Bitcoin Cash

Larger blocksize cap

Half-yearly hardfork (so lots of work for developers)

Obligatory quadratic-hashing solution (based on Bitcoin's segwit sighash algorithm) (In Bitcoin, it's opt-in, because SegWit is, hence Bitcoin doesn't solve the attack vector)

Signature covers value (useful for hardware wallets) (based on Bitcoin's segwit sighash algorithm)

220 bytes OP_RETURN (No incentive for destructive data publishing methods such as P2SH-wrapped multisig)

CTOR transaction ordering (permuting leaves of a merkle scheme is not allowed for block templates, only one possible order)

OP_CHECKDATASIG (based on a feature in the Elements Alpha project)

OP_: CAT AND OR DIV ...

Custom difficulty adjustment algorithm (This isn't feature. Little coins like BCH need more time-sensitive algorithms while large ones like Bitcoin need more precise ones that work over large time intervals)

Banned 64-byte transactions (Merkle leaf vulnerability resolved)

CashAddr address format (a modified version of the bech32 address format used for segwit addresses in Bitcoin)

Schnorr signatures beginning with 15th of May (using a specification based on a BIP originally proposed for Bitcoin)

Graphene, which is Compact Blocks but much more efficient since CTOR was introduced (it may work on Bitcoin too, this isn't a protocol feature)

And the larger difference is Bitcoin favors off-chain scaling while BCH favors on-chain. It won't matter in the long term, because off-chain protocols such as Lightning will come to BCH anyway while off-chain scaling needs on-chain scaling as well in the long term

Maybe you want to group some of the items as sub-bulletpoints under segwit (malleability fix, quadratic hashing fix, and sig covers value are all mandatory fixes for segwit transactions; and there is also an address format for them called bech32, which cashaddr is based on). If you feel like listing who invented what, Blockstream should also be credited for the quadratic hashing fix, signature covers value, Schnorr signature specification, and the BCH-code based addresses. I don't think mottos or hearsay about decentralization count as technical differences.

@PieterWuille Thanks pwuille, I had forgotten about a few of the SegWit's advantages, it seems much more neutral now. I've also made it community wiki.

Also what does the "not provably" mean? Third party malleability is clearly not possible for segwit inputs.

I've made a few changes, and changes the explicit authorship attribution to just mentioning what features are based on (as authorship is hard to attribute exactly).

I might have misread "Provably no inherent signature malleability, while ECDSA has a known malleability, and lacks a proof that no other forms exist. Note that Witness Segregation already makes signature malleability not result in transaction malleability." (here)

Ah yes, that's right - but in SegWit that's not relevant anymore.

Bitcoin: Compact Blocks, FIBRE, Satellite downlink.

@MCCCS, from your answer it seems that "Has SegWit" is the only main feature added only to Bitcoin and all items below are a consequence (cost or benefit?) of SegWit?
Most of the items in the Bitcoin Cash list are unclear to me, could you add some links for further reading or a brief description to the items?
Several of my original questions are still unanswered, so I'll wait with marking your answer as correct. Thank you very much anyway @MCCCS!

@mplattner Thanks for the feedback. In a few days I’ll add a paragraph explanations to each.


text:
Old Wallet, Private key and known public address
This is the scenario
I have an old wallet
This wallet misses a transaction. This transaction was confirmed several times in 2014
I have the public address of that transaction
If I ask to my friend to send the payment again (how?) to my address , will I get my founds back again?
In other words, I have an old backup of a wallet that misses a transaction but I have the pubblic address where my friend sent the coins
Is thera a way to get the litecoin back again without knowing the private key?Consider that I have the original wallet

Your wallet will contain a collection of private keys, and it should show you the balance of the addresses associated with those keys.
For the public address you mentioned, if you have the private key associated with it, you'll be able to spend the coins. If not, there is no way to recover a private key from a public key. The private key is either known by the wallet file, or not. There is no way to 'resend' a payment, etc, to recover a private key that is otherwise not known.

If you can find the transaction in a block explorer, and it contains an output directed at your address with the appropriate amount, then you're probably looking at a bug in your wallet software. If so, and your friend sends the payment again, he'll be paying you twice. I would try to import the key using other software (maybe Bitcoin Core) and see if the transaction is listed.


text:
What are the rev00000.dat files?
I've created an application with bitcoinj that extracts all addresses which have been used out of the block chain files created by bitcoin-core.
I'm extracting the transactions only out of the blk*.dat files. Do these files really contain any transactions or are there further transaction in the rev*.dat files?
What does the rev*.dat files contain?

They are files to assist reversing additions to the blockchain, handling reorganisations. They essentially contain the references needed to quickly reverse a block being accepted and it’s changes being made to the nodes UTXO. It does not contain transactions.


text:
Where is the UTXO data stored?
When a new transaction is received it is added to the memory pool (after checking for conflicts). While mining, only the transactions which are in the pool are considered. What happens to the transactions after they are included in a newly mined block? Are they deleted from the pool? Where is the UTXO stored? Which function handles it?

I assume this question is about Bitcoin Core's internal operations. This description is valid for version 0.8 and later (up to 0.14 at least).
One part of the system deals with the active chain, which is the longest valid chain of blocks (stored in $DATADIR/blocks) that we know of. This active chain gets blocks appended to - and occasionally removed when there is a reorganization.

Where is the UTXO stored?

For the tip (the last block in the active chain), we maintain a database with the set of unspent transaction outputs (UTXOs), stored in $DATADIR/chainstate, and aggressively cached in memory. When a new block is received, we remove the UTXOs spent by transactions in the block, and add the outputs of those transactions. When a reorganization happens, we use undo data (stored in $DATADIR/blocks/rev*.dat) to roll back the changes to the UTXO set. In a way, you can see blocks as patches to the UTXO set - but the UTXO set is never explicitly committed to or stored in blocks, it is merely implied by them.

What happens to the transactions after they are included in a newly mined block? Are they deleted from the pool?

The mempool is a set of transactions that are valid but not in a block. We don't treat those as part of the UTXO set. Rather, it's just a group of transactions that are internally consistent and consistent with the active chain. This means that any mempool transaction only spends outputs that are in the UTXO set, or from other mempool transactions. Whenever a new block comes in, we remove its transactions from the mempool (assuming they were there), and we remove any mempool transactions and their dependencies that conflict with the new UTXO set. When a reorganization happens, we try to move the removed block's transactions back to the mempool.

Which function handles it?

That's too long to answer here. A significant part of src/validation.* (in 0.14) or src/main.* (in older versions) together with src/coins.* deals with maintenance and caching of the mempool and UTXO set.


text:
What does the “m” in bech32m stand for?
I’ve looked at the mailing list, the BIP, commits that implement BIP350, the author’s twitter posts, and here on Stack Exchange, but couldn’t find an answer. Has it ever been publicly established what the “m” in bech32m stands for?

While I don't have a source for this, I've always assumed it means "modified".

I believe I picked the name due to the fact that the difference between Bech32 and Bech32m is the introduction of a non-zero "M" constant, added to the checksum.
That constant (or the perceived need for one) existed before the name Bech32m was used. For example, this write-up was referenced in this mailinglist post in december 2019, and suggests the use of M = 0x3FFFFFFF. While the constant was changed later after further analysis, I believe the "m" in the name is in reference to the addition to that constant. In the BIP itself the constant is now called BECH32M_CONST, however.
The origin of "M" constant name itself I cannot remember, but it may well stand for "modifier" or "modified". So I guess it's fine to think of that as the meaning.