text:
k selection for Schnorr signatures
So i was reading the BIP for Schnorr signatures and I couldn't find any explanation on why the simple RFC6979 Variant wasn't chosen for their nonce generation. Instead, they decided to go with their own implementation. Why is this?
EDIT: to clarify I'm not refering to normal RFC6979.

I'm not sure what simplified variant you're referring to, but this is a great question.
There are a number of reasons.
First, RFC6979 is not cheap and fairly complex. Computing a single candidate nonce costs 22 invocations of the SHA256 compression function. Hashes are fast, but this actually corresponds to hashing 1400 bytes which isn't trivial anymore compared to the time of signing. It serves a purpose - it's instantiating a well-knowing PRNG to generate the candidate nonces - but this is overkill for us. secp256k1 has the interesting property that its group order is negligibly close to 2256. So instead no PRNG is needed at all - a single hash suffices, which is lower complexity, and obviously constant time as well.
A simpler alternative is the one used by Ed25519, where a single SHA512 invocation generates a 512-bit number that is reduced modulo the curve order. Our construction is different, but is inspired by this. There are some changes though:

We don't need a 512-bit hash and a modulo reduction, again because the curve order is close to 2256, so we can use a 256-bit hash directly without reduction instead.
We're concerned about implementations where the public key of the signer is taken from untrusted input (something most signing APIs don't seem to protect against, as it's a performance penalty to recreate the public key from the private key instead). Greg Maxwell started a discussion on this cryptography mailing list about this problem: https://moderncrypto.org/mail-archive/curves/2020/001012.html, which received comments from DJB and others. We address this issue by including the public key into the nonce generation.
We're trying to protect against fault attacks and differential power analysis attacks by encouraging synthetic nonces (which incorporate actual randomness when it is available). RFC6979 also has a variant that supports this, but it appears that due to our use of linearly derived private keys (through BIP32, and through Taproot), DPA attacks are much harder to protect against, and standard solutions may not apply. See the bitcoin-dev mailinglist discussion here: https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2020-March/017711.html (where I agreed with OP that some of our design choices are not well explained in the BIP yet)


text:
Refunding of payments if scam
I was called by someone when I tried to withdraw my money, who works for Bluesave,  but when I log in the platform was Optima platform and when to proceed for withdraw he send me to Jubiter page. The problem is that the first time when I opened my account was in March and I put a deposit of 275 euros. Today I requested my money back and he took another 275 euros from my account saying that is the verification procedure. And then he said, in order to send me the full amount in my bank account I have to buy some bitcoins for about another 500 euros. I am concerned about this transactions an I want to ask if this is the correct procedure in order to get my money back?..If not what can I do to get them back? Thank you

Don't pay them, report them to your local authorities.

Bluesave is a very obvious scam. "High percentage, risk free deals on saving accounts that will provide you with a monthly return of up to 45% of your capital." That's like claiming to be able to teleport to Mars for lunch.

I want to ask if this is the correct procedure in order to get my money back?

No.
You are being tricked by a criminal. A confidence trickster (con-man). It is a common type of fraud or scam.

If not what can I do to get them back?

There's no way to get the money back. Bitcoin transactions are not reversible and cannot be undone or cancelled.
You can report this fraud to your local police so that the police crime statistics are more accurate - but they won't be able to recover your money for you.
You will be contacted by people who say they, or someone they know, can get your money back. They are lying to you. They also will eventually ask you to pay release fees, transfer fees, decryption fees or some other kinds of fees they invent. None of these fees are real. I urge you to ignore such offers and accept that your money is gone and move on with your life.

Today I requested my money back and he took another 275 euros from my account

From what you say, your Bluesave and/or Optima and/or Jubiter accounts are no longer under your control, any money in one or all of  those accounts is now under the control of a criminal. It will be best to not ever use these accounts again. Even after changing passwords, they cannot be guaranteed to be safe.
If I were you, I would make a list of all accounts the criminal might know of, then I would set aside any information given by the criminal (phone numbers and email addresses etc) and independently find out the true contact details for the businesses that provide those accounts (but be aware that some may be fake businesses run by the criminal), then I would ask, in writing, each business to close the account explaining that you are the victim of fraud.

Thank you very much for your help. I really appreciate it. Kind regards

source: Stack Exchange

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

sort: votes


text:
How's Blockchain like "magical Smart Contract"?
Please keep everything like I'm 5. I don't know computer science or programming. Please help me understand this ELI5 comment? I simplified names.

Bob opens a candy shop called BCS (Bob's Candy Shop).
He has no idea how taxes and all this adult stuff work so he asks his brother Charlie, a smart IT guy, to write him a magical SmartContract that cares about everything. [Question 1] He just needs a buyer to show the QR code Charlie gave him.
Alice comes by to buy some chocolate. She scans the QR code with her phone and sends the amount to the SmartContract Charlie made.
This contract automatically orders new chocolate and pays for it. The chocolate is already on its way to BCS. The taxes are calculated and stored in the SmartContract. This cares about paying the taxes and tells the taxman some other stuff in order to make taxman happy. The rest gets transferred to Bob's account. This all happens magically and faster as Bob can say "Thank you".
After the first day he buys a ticket for the film "Frozen" from the money he just earned. [Question 2] He only has to copy the address code which the cinema has on their website. He sends the amount of money and the name of the film to this address. The magical SmartContract of the cinema sends the ticket back.
Bob coincidentally meets Alice in the cinema. Both loved the film.

What does this mean?  Buyer like Alice has QR Code. Why Charlie gave Bob QR code?

This is just QR Code and buying movie ticket online What do with Block Chain?

Where's Block Chain in this analogy? Does Blockchain suppose be the "magical SmartContract"?

Bob's Candy Shop

What does this mean?

Sadly I think some of it is nonsense. Or at least overenthusiastic. Firstly when the author says taxes I think they are only referring to sales tax in the USA, not to other taxes such as income tax. Secondly I'd be very surprised if the taxman wants to receive individual tax payments for each customer transaction, normally these sort of taxes are paid periodically - e.g. at the end of a month. Thirdly, tax is often complex, there are often different tax-rates for different categories of product, different tax-thresholds and so on. Fourthly, I suspect the US taxman wants to be paid in USD not BTC and will want the unit-conversion to be based on an exchange-rate from a specific source - I don't think Bitcoin payment scripts have access to this sort of external data.Therefore I'd by very surprised if any but the most simple tax payment could be encompassed wholly within a purely  Bitcoin transaction without some off-chain support.

Buyer like Alice has QR Code. Why Charlie gave Bob QR code?

I believe the author is probably just referring to the standard way that a seller communicates a receiving-address to a buyer. Nothing special there.

This is just QR Code and buying movie ticket online What do with Block Chain?

If you purchase anything with bitcoin, the transaction involves a bitcoin-script. The transaction details, including this script are recorded in the blockchain.
The script is written in a simplified programming language and in an abstract way defines the parties involved and defines how they must prove they are entitled to spend the proceeeds.
There are some standard scripts.

Where's Block Chain in this analogy? Does Blockchain suppose be the "magical SmartContract"?

The blockchain is simply a list of transactions. It is like an accountants journal.
Smart contracts are either in the bitcoin-script in the transaction details or in some extra layer of software that sits on top of the Bitcoin network and only uses the bitcoin blockchain for final settlement (e.g. monthly reconciliation of accounts) not necessarily for each transaction.

Smart Contracts in Bitcoin
Wikipedia says

Bitcoin provides a Turing-incomplete script language that allows the creation of custom smart contracts on top of Bitcoin like multisignature accounts, payment channels, escrows, time locks, atomic cross-chain trading, oracles, or multi-party lottery with no operator.

The article refers to this PDF file: Atzei, Nicola; Bartoletti, Massimo; Cimoli, Tiziana; Lande, Stefano; Zunino, Roberto (2018), "SoK: unraveling Bitcoin smart contracts" (PDF), 7th International Conference on Principles of Security and Trust (POST), European Joint Conferences on Theory and Practice of Software

ELI5
This is the problem with ELI5. Many explanations to five year olds are of the form: "If you don't eat your greens the bogeyman will eat you in the night". You are not a five year old and are unlikely to find those sorts of explanation satisfying.

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


text:
Solve problems using bitcoin smart contracts
Been trying to ask this to few people on different platforms but nothing was helpful so trying here and will keep trying because I don't even know what else can I do to learn more and contribute.
What will be the best way or resources to refer if someone has an idea and want to implement it using bitcoin smart contracts?
For example: If I want to create a decentralized insurance product which might even need external data so won't be completely decentralized but trust minimized, non custodial, non kyc and better than present solutions. Users will have to regularly pay some amount which should be locked in some multisig setup and used in a way that it gets interest so maybe provide liquidity in joinmarket, create a lending/borrowing thing using discreet log contracts or something else, these profits can be used to cover life and release amounts after verification on claims
How would I approach solving this problem using bitcoin?
What are best resources to learn more about discreet log contracts, it's examples?

What will be the best way or resources to refer if someone has an idea and want to implement it using bitcoin smart contracts?

If smart contracts involve the use of external data (oracles) then Discreet Log Contracts are the best possible way.

How would I approach solving this problem using bitcoin?

I have mentioned few points in this doc, it won't be easy creating an oracle that decides if someone is dead or alive, create incentives around it, use of funds, exception handling etc. however nothing wrong in trying: https://docs.google.com/document/d/1baOWfya2mqd3ZAoDS4a2VQlb3-q4JCILXRN-oe4_zOk/edit

What are best resources to learn more about discreet log contracts, it's examples?

DLC channel in Lightning Dev Kit slack :https://lightningdevkit.slack.com/
Examples:
P2P Derivatives: https://github.com/p2pderivatives/p2pderivatives-client
https://medium.com/crypto-garage/step-by-step-guide-p2p-derivatives-application-c0454606428e
Benthecarman is working on a project which can be used to experiment with DLC (scala):
https://github.com/benthecarman/krystal-bull

Nicolas Dorier is also working on NDLC and I tried a creating a GUI for NDLC-CLI using C#:


text:
Any website that explains most of the BIPs in a different way that newbies can understand better?
Almost everything about all the BIPs is explained on github : https://github.com/bitcoin/bips still looking for a website that explains them differently (simple language, diagrams, history, implementations, etc. which everyone can understand better and appreciate the importance of proposals in Bitcoin.

I am not aware of one comprehensive write-up, but Aaron van Wirdum has a few great write-ups of various proposals in Bitcoin Magazine, the Bitcoin Optech newsletter has covered a number of the more recent proposals in depth, there are a number of talks (and transcripts of those) about BIPs on Youtube from conferences, workshops and Bitcoin meetups. There are a few BIPs that have their own tags here where they are covered more in depth, but again, I don't know about a single resource that is just focused on explaining all the BIPs. Maybe someone should start one? :D
Until then, our site here is a great place to ask all your questions about any BIPs.

Thanks. I was planning to make one in my free time if there is no such website.

Started working on a website: https://bips.gallery GitHub: https://github.com/prayank23/BIPsGallery Tweet thread: https://twitter.com/prayankgahlot/status/1322254155071680512


text:
Understand how transaction size and fees calculation works in caravan
Looks like there is no activity in caravan github repository so maybe someone here can help me with this issue. Already mentioned everything in the below link however my three basic questions are:
https://github.com/unchained-capital/caravan/issues/173

How does tx size and fees calculation work in caravan?
How does it work in other projects if there is any better implementation?
Will there be a standard and easy approach to solve this problem in future which can be easily used by every bitcoin project?

Is this question specifically about JavaScript?

No. Caravan uses JS. Question is about tx size and fee calculation. Example: If I am using Nbitcoin and create a project using C# still I will have to figure out a way for calculating size and fees for transactions.

Mh, I added a section to my answer to cover the topic more generally, but I also added the JavaScript tag here, because you are specifically asking about a JavaScript project which I answered for.

The fee rate is pulled here:
export function fetchFeeEstimate(network, client) {
  if (client.type === BLOCK_EXPLORER) {
    return blockExplorerGetFeeEstimate(network);
  }
  return bitcoindEstimateSmartFee({
    ...bitcoindParams(client),
    ...{ numBlocks: 1 },
  });
}

(https://github.com/unchained-capital/caravan/blob/3514039983984e184e8babb6c61c21a46798fc70/src/blockchain.js#L97-L105)
It depends on if you are using a block explorer or a local bitcoind node.
If using bitcoind, it uses the estimatesmartfee rpi cal:
export async function bitcoindEstimateSmartFee({ url, auth, numBlocks = 2 }) {
  const resp = await callBitcoind(url, auth, "estimatesmartfee", [numBlocks]);
  const feeRate = resp.result.feerate;
  return Math.ceil(feeRate * 100000);
}

(https://github.com/unchained-capital/caravan/blob/3514039983984e184e8babb6c61c21a46798fc70/src/bitcoind.js#L111-L115)
As for the transaction size/ total fee calculation, caravan uses estimateMultisigTransactionFee from unchained-bitcoin
(https://github.com/unchained-capital/caravan/blob/fd214eb573c7185c01dfa2040aa914e87a0de359/src/actions/walletActions.js#L129)
Which depending on the transaction type (P2SH, P2WSH, P2SH-P2WSH) calls a transaction size estimator. The P2SH one is:
export function estimateMultisigP2SHTransactionVSize(config) {
  const baseSize = 41 * config.numInputs + 34 * config.numOutputs + 30;
  const signatureLength = 72 + 1; // approx including push byte
  const scriptOverhead = 4;
  const keylength = 33 + 1;  // push byte
  const sigSize = signatureLength*config.m*config.numInputs + keylength*config.n*config.numInputs + scriptOverhead*config.numInputs;
  const vsize = baseSize + sigSize;
  return vsize;
}

(https://github.com/unchained-capital/unchained-bitcoin/blob/e9177e7171c3bf11ad5c245c7d633dac484f409c/src/p2sh.js#L27-L35)
Regarding your other questions, I look forward to hearing more about this. When we wrote this, I wasn't aware of unspents. It would be nice if there was a standard, well-tested package for calculating transaction fees.
Regarding other projects: Lily uses unchained-bitcoin: (https://github.com/KayBeSee/lily-wallet/blob/5945175f9e25cc7a8ff29159de39c228b79ef205/src/pages/Send/utils.js#L48) so it's the same as Caravan. I don't know what Casa does. I would assume BitGo uses unspents that Murch linked to. I'm pretty sure Electrum has it's own thing, but I haven't looked, I'd assume the same for Specter.
Hope this helps, sorry we didn't get back to you on the caravan issue, infomational tickets like that are low-priority for us right now.

Thanks for the detailed response. This will be helpful especially the transaction size calculation part.

Generally, the vsize and weight of transactions is determined by counting the byte length of the serialized transaction, and by weighting the different parts of the transactions according to the rules of segwit. As most transactions use standard scripts, the input and output sizes are known in advance and the transaction size can be easily estimated from the count of inputs and outputs (and their script types). Since ECDSA signatures can have a slightly variable size, the transaction weight is usually estimated by using the largest possible weight (safest), or the expected weight. Signature size can be homogenized by using signature grinding.
According to its package.json, Caravan uses bitcoinjs-lib.
bitcoinjs-lib is an established JavaScript library for address and transaction related tooling.
The code for calculating the weight of a transactions in bitcoinjs-lib is found in the Transaction class, specifically in the Transaction.weight() function. After the weight has been determined, the fee is calculated by weight and fee rate. As far as I am aware, bitcoinjs-lib does not provide its own fee rate estimates, so Caravan would likely rely on one of the many publicly available APIs to get a fee rate estimate.
BitGo provides an opensource library called unspents that calculates the virtual size of transactions in dimensions.ts. It's inspired by bitcoinjs-lib but has a special focus on multsig inputs. (Disclaimer: I have contributed code to unspents.)
There are similar libraries for other programming languages to provide tools for creating Bitcoin transactions and addresses.


text:
Should a user be notified about "last modified" time of bitcoin.conf while the bitcoin core wallet is loading?
I have mentioned details here: https://github.com/bitcoin-core/gui/issues/76
Also what would be the best approach to solve this problem using c++ which works on linux, windows and mac without any issues?
Few solutions are mentioned here: https://stackoverflow.com/questions/40504281/c-how-to-check-the-last-modified-time-of-a-file

No.
If your machine is compromised you can't trust last modified timestamps.
One of the obstacles to Bitcoin adoption is complexity. Developers should keep the user interface as simple and clear as possible. 99.9% of users wouldn't understand the information or how to use it.
A better approach to detecting malicious changes to a configuration file might be to encrypt the configuration file with the wallet password or to store a checksum of the config file in the encrypted wallet file and only alert the user when configuration changes are detected that were not made via the wallet software itself.  But any message should carefully and clearly explain what the situation is without confusing new inexperienced users.
I'm not sure how useful this is since if your wallet config has been maliciously altered the whole computer is untrustworthy.

If your machine is compromised you can't trust last modified timestamps

Makes sense

99.9% of users wouldn't understand the information or how to use it

Possible. Still may help few.

alert the user when configuration changes are detected that were not made via the wallet software itself

Interesting

whole computer is untrustworthy

Yes. And this solution may help notify the user early about it instead of him doing it after few days. Example: you receive emails from services that XYZ change was made to your account, secure account if it wasn't you.

I think @RedGrittyBrick just means that it's pointless: an attacker who is able to modify the config file can also hide the time of modification... or steal the wallet file... or replacing the bitcoin binary with a version that lies about the timestamp... or just sends your coins directly away. You need to be able to trust the system you're running a wallet on; no way around that.

@Prayank: The point is that if someone can modify your configuration file, they could also modify your Bitcoin installation such that the modification will not raise an alert. Warnings by a service provider work because gaining access to change the password is a different level of access from being notified about such changes.

@Murch Possible

@PieterWuille sure attacker can do more than just making changes in config file and I realized such timestamp information may help in some cases although its best to solve it at system level for all important files by user with something like https://sourceforge.net/projects/iwatch on linux which is a tool for detecting changes in filesystem and send email notifications. https://i.imgur.com/EUJnBQE.png


text:
What are the safe ways to connect to bitcoin network using tor?
One case that I remember when someone was unable to connect his bitcoin full node to the network because of censorship: https://twitter.com/TheBlueMatt/status/1161291626553270272
Matt suggested using TOR bridges for people who are unable to connect (directly/vpn/tor without bridges)
What are safer ways to connect to the Tor network so that you can use Bitcoin?

Recently read one blog post which highlights the issues involved in using tor bridges and I will summarize few things that I found interesting:

The author asks not to use unlisted or private bridges which is contrary to what Matt said in the above mentioned tweet in question.

Harvesting the unlisted bridges: http://hackerfactor.com/blog/index.php?/archives/892-Tor-0day-Finding-Bridges.html

Public bridges: Your Tor connection looks like thousands or millions of other users. This provides safety in numbers. In the worst case, an adversary can see that you are using Tor, but not what you are doing over the Tor network. Moreover, if you disconnect and then reconnect later from a different location, there is nothing linking your new connection to your previous connection; this mitigates the risk from tracking based on the connection method.

Using Tor places you at risk sometimes: China India Turkey

If Tor's use can be uniquely associated with you, then you are identifiable. Being identifiable means you may be monitored. How you connect to Tor allows you to be identified. In high-risk areas, using Tor makes you a suspect, and unlisted bridges make you easy to track. However, if you are arrested, then the official charge will probably on a non-Tor related topic (circumventing censorship, spreading unrest, etc.).

Unlisted and Private bridge users are also the most at-risk because they are in censored areas that forbid direct and public bridge connections

If they are blocking, then they are explicitly looking for Tor user.

Internet disruptions in Belarus Internet shutdowns in India

Unlisted bridge set is very distinct and effectively unique

If you configured the Tor Browser to use bridges, then during the startup, it immediately connects to all of the configured bridges. An observer on the network will see connection requests from your current real IP address to the "very distinct and effectively unique" set of bridges. This allows an adversary that is tracking you to know that the IP address making the connection is explicitly you. Combined with historical sightings, they can determine when you first requested the set of bridges, where you were each time you accessed Tor, and where you are currently located.

It doesn't disconnect from an established bridge connection until the browser shuts down. An adversary can see exactly which bridge set you had and to which set you switched.

If all of your bridges match a set of bridges that I collected, then I know exactly which Tor exit node you were using and a timeframe when you were using it. While you are not unique, you are very distinct. This allows me to associate your real IP address with traffic from a known Tor exit node.

Your set of unlisted (or private) bridges is stored to disk. If you use a system that never saves to disk, such as Tails, then you're fine. Just don't re-use bridge sets. But if you use the Tor Browser for the desktop or for mobile devices, then you are unique enough for tracking.

The adversary has placed users in a corner: use Tor with unique tracking attributes, or don't use Tor. (Why are they not blocking all unlisted bridges? Maybe they don't have a LUB yet. Or maybe it is better to track and identify internal dissidents than it is to stop their connectivity. They may be intentionally blocking the safe and anonymous ways to connect to the Tor network in order to flush you out.)

From a practical viewpoint, Tor users should consider the trade-off between discovery and connectivity. If you are in an environment that does not permit direct connections, and does not permit the public bridges, then it probably isn't safe enough to use the Tor network.

The blog post mentions usage of Tor browser which may not be the case when you are using Bitcoin full node with tor proxy on your machine. However lot of things mentioned are important if you are living in an area which has network censored by government regularly.
Source: http://hackerfactor.com/blog/index.php?/archives/893-Tor-0day-Tracking-Bridge-Users.html
Bridges can be configured using Tor browser in Windows or Ubuntu:

Tails OS and few other Linux distros may have different settings to configure bridges: https://tails.boum.org/doc/first_steps/welcome_screen/bridge_mode/index.en.html
If you want to use bridges with torproxy, will have to add few things in /etc/tor/torrc file and you can compare the changes with a torrc file for Tor browser bundle:

Orbot on Android has the option to configure bridges:

Setup docs related to TOR when using Bitcoin Core: https://github.com/bitcoin/bitcoin/blob/master/doc/tor.md

FIRST POST
What are the safe ways to connect to bitcoin network using tor?

What are the safe ways to connect to bitcoin network using tor?

I would recommend using bridges with pluggable transport. Circumvention techniques https://tb-manual.torproject.org/circumvention/ , explaining bridges, pluggable transport and their description.
China can't block meek-azure as they would lose microsoft services, snowflake is experimental (included in the next Tor Browser release) and public obfs4 bridges are already blocked by them.
This is a text I wrote (partially) for a project https://github.com/radio24/TorBox/blob/master/text/help-bridges-text:
WHAT ARE BRIDGES AND PLUGGBLE TRANSPORT?

Bridges, unlike ordinary relays, however, they are not listed publicly,
so an adversary cannot identify them easily.
Using bridges in combination with pluggable transports helps to disguise
the fact that you are using Tor, but may slow down the connection compared
to using ordinary Tor relays.
Direct access to the Tor network may sometimes be blocked by your Internet
Service Provider or by a government. Tor Browser includes some
circumvention tools for getting around these blocks. These tools are
called “pluggable transports”.
TorBox only will use bridges with pluggable transport, as they help you
bypass censorship against Tor, being more secure than normal bridges.

PLUGGABLE TRANSPORTS BRIDGES:

OBFS4 is a randomizing transport, it adds an extra layer of specialized
encryption between you and your bridge that makes Tor traffic look like
random bytes. It also resists active-probing attacks, where the censor
discovers bridges by trying to connect to them. obfs3 and scramblesuit
are similar in nature to obfs4.
MEEK makes Tor traffic look like a connection to an HTTPS website. Unlike
the other transports, it doesn't connect directly to a bridge. meek first
connects to a real HTTPS web server (in the Amazon cloud or the Microsoft
Azure cloud) and from there connects to the actual bridge. Censors cannot
easily block meek connections because the HTTPS servers also provide many
other useful services.
SNOWFLAKE sends your traffic through WebRTC, a peer-to-peer protocol with
built-in NAT punching. For censored users, if your Snowflake proxy gets
blocked, the broker will find a new proxy for you, automatically.

WHICH TRANSPORT SHOULD I USE?

Countries with moderate internet censorship: Use OBFS4
China or countries with similar internet censorship: Use SNOWFLAKE or MEEK

HOW CAN I CHECK THE VALIDITY OF A OBFS4 BRIDGE?
Go to https://metrics.torproject.org/rs.html and search for the fingerprint (this is the long number between the ip:port and cert=). Tor Metrics should then show you the information of that particular server. If it doesn't show up, the bridge is no longer valid.
HOW DO I KNOW IF IT IS WORKING?
Follow the logs. PLEASE BE PATIENT! The process to build circuits could last for several minutes, depending on your network! In the end, you should see "Bootstrapped 100%: Done".
SECOND POST
https://bitcoin.stackexchange.com/a/98773/123554
I would like for a more experienced person or even TPO volunteer to respond this rather than me, but they already have answered Dr. Neal Krawetz AKA "Hacker Factor" points. https://matt.traudt.xyz/posts/enough-about-hackerfactors-0days/ and https://twitter.com/torproject/status/1288955073322602496.
If you want volunteers to link material for you to read more of their answers to this Krawetz blog post, you definetely should ask in the IRC channel (I need more sources too).
Unfortunately, I did too believe everything was mentioned in this in this blog post in Hacker Factor before, his points are obvious already disclaimed by TPO, given enough visibility of the network, an attacker that can watch both sides of the connection, can (continue here). But Tor does not solve all anonymity problems (addressed in the point 11).
I see your point of defending a person physical integrity, but I do believe that if they need to access the Tor network by any chance, they should be educated about it, as you did on the last part of your post with the photos, good :)

The author asks not to use unlisted or private bridges which is contrary to what Matt said in the above mentioned tweet in question.

Attacker knows the listed bridges, if User prefers unlisted bridges, his chances are slightly better, else they have no protection.

Harvesting the unlisted bridges: http://hackerfactor.com/blog/index.php?/archives/892-Tor-0day-Finding-Bridges.html

Matt Traudt's point:
Perhaps surprisingly, this is known. It's also an important problem. It's being worked on at a pace slower than HF finds acceptable.
But HF presents variations on known attacks without evidence that they work at a large scale. Two possible issues: too much state to keep track of, or too many false positives such that the adversary is unwilling to deploy it. Luckily for HF, the bar for publishing "science" in a blog post is on the ground. He can say things confidentially and non-experts believe him. Shame on you, HF.
He further shows that he barely looked into this before putting pen to paper (or fingers to keyboard?) by:
admitting to not knowing of any prior work (in response Tor Project points him to some),
citing a paper to support the claim that the Great Firewall can detect obfs4 when the paper say the opposite,
citing a blog post about obfs4 bridges being blocked in China, then ignoring that the issue discussed therein is about bridge distribution. Remember HF, in this section you were talking about fingerprintable network activity.

an adversary can see that you are using Tor, but not what you are doing over the Tor network

Yes, but (public bridges) are not a possible solution if in China, public bridges are blocked before being released.

Using Tor places you at risk sometimes

Agree.

If Tor's use can be uniquely associated with you, then you are identifiable. Being identifiable means you may be monitored. How you connect to Tor allows you to be identified. In high-risk areas, using Tor makes you a suspect, and unlisted bridges make you easy to track. However, if you are arrested, then the official charge will probably on a non-Tor related topic (circumventing censorship, spreading unrest, etc.).

How you connect to Tor allows you to be identified

How? Given onion routing, the attacker would need to watch both sides of the connection. If he just watches the User and find it his connection suspect, it is not possible to assure every time he is using Tor.

In high-risk areas, using Tor makes you a suspect,

Yes, if you are identified, or at least suspected.

and unlisted bridges make you easy to track.

How? They are not known. Yes, there is the claim to be sniffing the traffic and alarm that this ip was not reached before. But this happens every time you reach a new server too.

Unlisted and Private bridge users are also the most at-risk because they are in censored areas that forbid direct and public bridge connections

I disagree again, as explained in the points 1 and 5. Unlisted and Private bridges are the only option for people in this situation. Yes, there are risks, but it is lower when than using public bridges. He might not be able to connect to the network otherwise, there is the trade-off of never using it or risking to have more access to free information.

If they are blocking, then they are explicitly looking for Tor user.

Great possibility that this is connected, or they are not looking for Tor users, but preventing from having them. Who knows? Joking, yes.

Internet disruptions in Belarus Internet shutdowns in India

Fact, unfortunately.

Unlisted bridge set is very distinct and effectively unique

This was addressed in my responses to 1,2,3,5,6.

If you configured the Tor Browser to use bridges, then during the startup, it immediately connects to all of the configured bridges. An observer on the network will see connection requests from your current real IP address to the "very distinct and effectively unique" set of bridges. This allows an adversary that is tracking you to know that the IP address making the connection is explicitly you. Combined with historical sightings, they can determine when you first requested the set of bridges, where you were each time you accessed Tor, and where you are currently located.

I responded the first half before. The "very distinct and effectively unique" are new ips possibly never seen before or ips that have been seen before but couldn't be correlated or identified as bridges, so they are no banned.
The second half you are embracing the Hacker Factor blog post. My response is simple, giving enough power to watch the network, it becomes compromised. This has not been proven to be done before. Also, after you connect to Tor with Bridges, know you have easier access to requesting new unlisted bridges than before.

It doesn't disconnect from an established bridge connection until the browser shuts down.

Yes.

An adversary can see exactly which bridge set you had and to which set you switched.

Addressed in the second half of point 10, given enough power....
Also a quote extracted from here https://2019.www.torproject.org/about/overview.html.en#stayinganonymous
Tor does not provide protection against end-to-end timing attacks: If your attacker can watch the traffic coming out of your computer, and also the traffic arriving at your chosen destination, he can use statistical analysis to discover that they are part of the same circuit.

If all of your bridges match a set of bridges that I collected, then I know exactly which Tor exit node you were using and a timeframe when you were using it. While you are not unique, you are very distinct. This allows me to associate your real IP address with traffic from a known Tor exit node.

I disagree. Knowing the bridges you used is possible, as it is always your first connection, but even by connecting to unlisted bridges, they are not always in the blocklist.
Addressed in point 11 some portions.
About associating the real ip address with traffic from the exit node, yes, tor does not protect if the attacker can sniff the first and last hop at the same time. But circuits changes every 10 minutes or less if you prefer to reinforce change signaling a NEWNYM. The first bridge can change if the User configure more than one bridge, the exit node also could change (but not always, newnym changes circuit, but not always every ip change. Extracted from here https://stem.torproject.org/faq.html#how-do-i-request-a-new-identity-from-tor
Tor periodically creates new circuits. When a circuit is used it becomes dirty, and after ten minutes new connections will not use it. When all of the connections using an expired circuit are done the circuit is closed.
An important thing to note is that a new circuit does not necessarily mean a new IP address. Paths are randomly selected based on heuristics like speed and stability. There are only so many large exits in the Tor network, so it's not uncommon to reuse an exit you have had previously.
Tor does not have a method for cycling your IP address. This is on purpose, and done for a couple reasons. The first is that this capability is usually requested for not-so-nice reasons such as ban evasion or SEO. Second, repeated circuit creation puts a very high load on the Tor network, so please don't!

Your set of unlisted (or private) bridges is stored to disk. If you use a system that never saves to disk, such as Tails, then you're fine. Just don't re-use bridge sets. But if you use the Tor Browser for the desktop or for mobile devices, then you are unique enough for tracking.

The problem of not reusing bridge sets, is always configuring new bridges, this is not possible every time to ensure this. About using Tor browser, the best modified firefox browser to protect from fingerprinting and tracking, but you don't become unique, you become just like every other user, the same screen size, canvas, you become indistinguishable as far as it can do for you.

The adversary has placed users in a corner: use Tor with unique tracking attributes, or don't use Tor. (Why are they not blocking all unlisted bridges? Maybe they don't have a LUB yet. Or maybe it is better to track and identify internal dissidents than it is to stop their connectivity. They may be intentionally blocking the safe and anonymous ways to connect to the Tor network in order to flush you out.)

Possibly, this questions are important to think of possible outcomes of this situation, is all about making you choice at the end of the day.

From a practical viewpoint, Tor users should consider the trade-off between discovery and connectivity. If you are in an environment that does not permit direct connections, and does not permit the public bridges, then it probably isn't safe enough to use the Tor network.

It is not safe enough to live in those places or acquire enough privacy, as you are under surveillance. About not being safe enough to use Tor network, probably you will be hunted if they discover, but without it, you would be an public ip node, which is even worse.

Read the writings below after reading these two first:

https://bitcoin.stackexchange.com/a/98773/123554
https://bitcoin.stackexchange.com/a/107080/123554

Ok, I see I replied to the first post and I can't add more than 8 links.
Here it is some better responses to Krawetz posts:

https://news.ycombinator.com/item?id=24500214
https://news.ycombinator.com/item?id=23929312
https://news.ycombinator.com/item?id=18523549


text:
Compress transaction hex string
I realized transaction hex can be very long and you need it for broadcasting a tx using blockstream.info API:
https://blockstream.info/testnet/api/tx

https://github.com/Blockstream/esplora/blob/master/API.md
If the user wants to send this hex using text message which allows 160 characters in one message, what should be the best way to solve this problem? I tried researching about way to compress it, send to a number which forwards to the web server running a PHP code, the hex string is decompressed and sent to blockstream.info for broadcasting tx. Base64 encoding after gzcompress() couldn't reduce the number of characters to less than 160.
Example:
Hex:02000000000101e939fb23e9991ebbc75fd08c736da32ca12d98a4ff1b8e970e97f5661927ee410100000000fdffffff02b0a90a000000000016001421e2f997b3bd36e273eaca365da8515a389444ae40420f0000000000160014829e2dbcf6b7f31bc93633971f71f6f6b9b5f89e0247304402200f8e3e573be749caf1964a85707bf540de2e7b367ae46c23bd4f21932ff82346022062dc3007072cd5a19b45e479525f4829bc48be4fd3c21b5a9ae34bcf9a3a3ccf0121020f88c7db36cbb492e80d3062fc19db55bed82687498f8cfe6d0cf47adf6687aa49f31b00
Compressed and Base64 encoded:
eNpdkNmJBEAIRFPyarsNxzP/ENZZGBZW9Eew6pVA8C0EbGObIG4zw47Ie6bg5WUtZ0pHKnsuMxiv7cLOHFU0ut2yCl+xqfktoAA3cPiz0R0hbBqzGxzF2nS5PZ31lL+Dx/mZiHgLCMH8v35kTRU5GncYI42V2S7Otu7W4syzBpLLIAK0Mec197kcfcXSB01lzS7cmCNQTb04etdUk5ZLhtCYZh6x6EdDqZIB9oSyjqOFnJZrh858oCLlRcsUJ2EcN2+WxTRn58wBJITN8/altV4ZIUb9oHi1J9EqzomuR/qW8s3LaS3Ikes1ult3sU9mgB8sW3Vy

Compressing a more-or-less random number is futile. Your best option is simply to use a more compact encoding. Base64 is better than Hex but there exists may other encodings that prform better
Wikipedia lists many and ranks them in order of efficiency
Encoding            Data type                    Efficiency
yEnc                Arbitrary, mostly non-text   ~98%
Ascii85             Arbitrary                     80%
Base85 (RFC 1924)   Arbitrary                     80%
Base64              Arbitrary                     75%
...

You can obviously do better if you use 8-bits (e.g. Unicode printable code points that have single byte encodings in UTF-8) but since SMS uses a 7-bit character set (so far as I know) you won't do much better

I think I found the solution. Maybe one of these scripts might solve the issue, will have to check how many words are created for hex. https://gist.github.com/grubles/41a8ab74afe2cee6ef7128b07438455b OR https://github.com/BlockchainCommons/bc-bytewords OR https://github.com/sipa/gramtropy

None of those will help, for sure. What you're asking for is information theoretically impossible. Random data cannot be compressed.

I think you are right, tried one of them and it didn't work as expected. I will have to figure out a way to send tx hex in multiple messages. I wish we had a Tx Shortener like URL Shorteners.

If the user wants to send this hex using text message which allows 160 characters in one message, what should be the best way to solve this problem?

Turning 222 bytes to 160 characters is going to be very challenging so our focus can not be only on the encoding but it should be directed at the 222 byte itself. Since it is not exactly random bytes and bitcoin transaction structure is not exactly the most efficient structure there are opportunities to compress these bytes (or more accurately to get rid of some "useless" bytes).
Let's first break it down and see which bytes we can get rid of:
1) 02000000
2) 0001
3) 01
4) e939fb23e9991ebbc75fd08c736da32ca12d98a4ff1b8e970e97f5661927ee41
5) 01000000
6) 00
7) fdffffff
8) 02
9) b0a90a0000000000
10) 16001421e2f997b3bd36e273eaca365da8515a389444ae
11) 40420f0000000000
12) 160014829e2dbcf6b7f31bc93633971f71f6f6b9b5f89e
13) 02
14) 47304402200f8e3e573be749caf1964a85707bf540de2e7b367ae46c23bd4f21932ff82346022062dc3007072cd5a19b45e479525f4829bc48be4fd3c21b5a9ae34bcf9a3a3ccf01
15) 21020f88c7db36cbb492e80d3062fc19db55bed82687498f8cfe6d0cf47adf6687aa
16) 49f31b00

Version
Could turn into 1 byte encoded as a CompactInt -> 02
Witness flag
Can be skipped ->   (it works by modifying #6)
Input count
No change -> 01
Input transaction hash
No change -> e939fb23e9991ebbc75fd08c736da32ca12d98a4ff1b8e970e97f5661927ee41
Input index
Another CompactInt -> 01
Signature script
As a rule all scripts could start with a flag 1=P2PKH, 2=P2WPKH, 3=P2SH,... 255=notdefined, and when they are not defined the exact script is placed here with the size and everything else. Like every other part the receiver has to construct the script correctly (set witness flag #2, move these to witness items #14 & #15, add lengths for each push pushes, DER encode signature)
Witness becomes: <1-byte-flag><32-byte-r><32-byte-s><33-byte-pubkey>
<02><0f8e3e573be749caf1964a85707bf540de2e7b367ae46c23bd4f21932ff82346><62dc3007072cd5a19b45e479525f4829bc48be4fd3c21b5a9ae34bcf9a3a3ccf><01><020f88c7db36cbb492e80d3062fc19db55bed82687498f8cfe6d0cf47adf6687aa>
If pubkey was uncompressed the first byte is changed to 0x82=0b10000010 (most significant bit set) to indicate uncompressed pubkey should be constructed.
Sequence
can be encoded as a "StackInt" (a number that is pushed to stack which can be negative)
1=OP_1, 2=OP_2 -1=OP_NegativeOne -2=0x82, 321321=0x4e29e70400
Since 0xfdffffff is UInt32.Max-2 -> 82
Output count
No change -> 02
Amount
As a CompactInt -> feb0a90a00
Pubkey script
Similar to signature script we could use flags for standard scripts, eg. 0x03 could be P2WPKH scripts -> 0321e2f997b3bd36e273eaca365da8515a389444ae
Amount
As a CompactInt -> fe40420f00
Pubkey script
Same as before 03829e2dbcf6b7f31bc93633971f71f6f6b9b5f89e
Witness item count
Removed ->
Witness
Removed (it is already placed in #6) ->
Witness
Removed (it is already placed in #6) ->
Locktime
No change -> 49f31b00

Now the 222 bytes is compressed into 192 bytes (13.5%) which can then be encoded with a more efficient encoding to get the best possible result.
This could also be compressed more if you are sending this transaction to the actual receiver of the funds by skipping their output(s). For instance when you were supposed to pay 698800 satoshi to bc1qy830n9anh5mwyul2egm9m2z3tgufg39wk4g0eu, the receiver already knows this and you don't have to tell them again. That means 26 bytes in #11 and #12 can be skipped reducing the size to 166 bytes (25.2%). But it has to be agreed upon that the receiving output is the first one for example.
This could be compressed even more by coming up with more agreements:

Tx version should always be 2 -> 165 bytes
SigHashType should always be SigHashAll -> 164 bytes (remove from each input #6 here)
Each input sequence should be set to predefined int -> 163 bytes (skip #7)
Tx should always have 2 outputs -> 162 bytes (skip #8)
Locktime should always be 0 -> 158 bytes (skip #16) (28.8%)

Thanks for suggesting few ideas which can be helpful at some point in this project or other project.


text:
How to run Bitcoin Core as onion service on Windows, Ubuntu and Android?
Have you tried running Bitcoin Core listening on Tor on different platforms? What are your experiences, issues that you faced, hacks, workarounds etc.?

Windows
You can follow one of the steps from 2 and 3. Step 2 uses cookie for authentication and Step 3 uses password.

Download and Install Bitcoin Core from https://bitcoincore.org/bin/bitcoin-core-0.20.1/bitcoin-0.20.1-win64-setup.exe

Edit the bitcoin.conf file, enter the below things and save it. Default location of the file is %UserProfile%\AppData\Roaming\Bitcoin\bitcoin.conf

listen=1

debug=1

logips=1

testnet=1

listenonion=1

onlynet=onion

proxy=127.0.0.1:9150

torcontrol=127.0.0.1:9151

How to setup cookie auth for Tor control?

Open C:\Users\Prayank\Desktop\Tor Browser\Browser\TorBrowser\Data\Tor\torrc and add below line:
HCookieAuthentication 1

IGNORE THIS STEP IF YOU ALREADY DID STEP 2. Edit the bitcoin.conf file, enter the below things and save it. Default location of the file is %UserProfile%\AppData\Roaming\Bitcoin\bitcoin.conf

listen=1

debug=1

logips=1

testnet=1

listenonion=1

onlynet=onion

proxy=127.0.0.1:9150

torcontrol=127.0.0.1:9151

torpassword=XYZ
XYZ: Replace it with your password in plain text

How to setup password for Tor control?

Open command prompt/PowerShell and run the below commands:
cd "C:\Users\Prayank\Desktop\Tor Browser\Browser\TorBrowser\Tor"
tor --hash-password "XYZ" >torhash.txt
Open torhash.txt file, copy the last line which has below content, paste in C:\Users\Prayank\Desktop\Tor Browser\Browser\TorBrowser\Data\Tor\torrc and save it:
HashedControlPassword 16:1CEDITEDOMERANDOMSHITCF8EBCD9A50CLOLCDACF
Run the below commands in command prompt or PowerShell to ensure connection with Tor control works:
telnet 127.0.0.1 9151
AUTHENTICATE "XYZ"

Launch Tor Browser

Launch Bitcoin Core Wallet (Testnet) using the shortcut with a green icon or run "C:\Program Files\Bitcoin\bitcoin-qt.exe" -testnet in command prompt or PowerShell and change the path accordingly

Run getnetworkinfo in console window and check the localaddresses. Check if testnet3/onion_private_key file is created and analyze the logs in debug.log file.

Ubuntu
You can follow one of the steps from 2 and 3. Step 2 uses cookie for authentication and Step 3 uses password.

Download Bitcoin Core and run the below commands:

tar xzf bitcoin-0.20.0-x86_64-linux-gnu.tar.gz
sudo install -m 0755 -o root -g root -t /usr/local/bin bitcoin-0.20.0/bin/*
/usr/local/bin/bitcoin-qt

Edit the .bitcoin/bitcoin.conf file, enter the below things and save it.

listen=1

debug=1

logips=1

testnet=1

listenonion=1

onlynet=onion

proxy=127.0.0.1:9050

How to setup Tor?

sudo apt install tor
Open /etc/tor/torrc and add below lines:
ControlPort 9051
CookieAuthentication 1
CookieAuthFileGroupReadable 1
Restarts Tor: sudo /etc/init.d/tor restart
Add user to Tor group: sudo usermod -a -G debian-tor <username>
Run Bitcoin Core: /usr/local/bin/bitcoin-qt

IGNORE THIS STEP IF YOU ALREADY DID STEP 2. Edit the bitcoin.conf file, enter the below things and save it.

listen=1

debug=1

logips=1

testnet=1

listenonion=1

onlynet=onion

proxy=127.0.0.1:9150

torpassword=XYZ
XYZ: Replace it with your password in plain text

How to setup password for Tor control?

Open command terminal and run the below commands:
torpass=$(tor --hash-password "my-tor-password")
printf "HashedControlPassword $torpass\nControlPort 9051\n" | sudo tee -a /etc/tor/torrc

Run getnetworkinfo in console window and check the localaddresses. Check if testnet3/onion_private_key file is created and analyze the logs in debug.log file.

Android
Download, Install and Run either ABCore or Nayuta Core.

I have selected Bitcoin Knots in the settings of ABCore however there is an option to use Bitcoin Core as well.


text:
How to create unsigned tx in a watch-only wallet?
UPDATE: The issue is resolved and I have mentioned the steps in Create unsigned tx (PSBT) in a watch-only wallet using bitcoin core, sign it in electrum and broadcast using bitcoin core
Below are the steps that I followed and couldn't create an unsigned tx. I am not even sure what are the inputs that can be used for it in this case and how to add inputs.
create a watch-only wallet

add one address in 'sending addresses'

dont see anything in 'receiving addresses' and no option to add

open console and run the below commands to add one address
importaddress tb1qu2l4n8st9w3hhsxstd8muaxgnu63fql9rkylmd "receivetesting" false
rescan blockchain to update
rescanblockchain 1800000 1834770
can see the address in 'receiving addresses' and balance

How do I create an unsigned tx because I get the below error and dont see anything in available balance or inputs?
Consider the scenario in which I have added an address from my cold storage to watch the balance and now want to create an unsigned transaction that spends from it which I will sign later on a different machine (offline)
Also receiving and sending addresses in a watch-only wallet is confusing. Not sure at this moment how can we make it easier to understand atleast in the GUI.

I found this on reddit related to same issue however didn't understand how was it resolved: https://www.reddit.com/r/Bitcoin/comments/ir308h/watch_only_balance_not_spendable_in_bitcoin_core/g4w3svg/

Just importing the address isn't enough for Bitcoin Core to be able to draft a transaction. The address contains the hash of you public key, but in order to create a transaction you need to public key itself. The importmulti command is probably better for the job. See also https://github.com/bitcoin-core/HWI/blob/master/docs/bitcoin-core-usage.md

Thanks @SjorsProvoost I will try however think we can improve GUI in this case at least the error message.

I only was just directed to this post, but @Prayank I agree -- I think I'm probably to blame for the misleading error message.

Hi it's moral_agent from the reddit post.
https://www.reddit.com/r/Bitcoin/comments/ir308h/watch_only_balance_not_spendable_in_bitcoin_core/g5gg33f/
I do not know whether this will help you or not but I will tell you what helped me and what I think I was doing wrong.
In order to create a PSBT that spends a watch-only output, it is not always sufficient to import the address of the output.
For a pay-to-script-hash address you will also need to import the script of the output. This makes sense, since creating a valid P2SH transaction requires that you include (and satisfy) the script. Your cold-signing wallet is only expected to supply the signature, not the script, so the PSBT needs to contain that information, so your hot computer must have it to create a PSBT.
I was able to import the required script by doing importmulti. I actually didn't import the script, I imported the script descriptor sort of like this:
importmulti "[{ "desc": "sh(multi(2,BLAH-BLAH-HEX))" }]
I didn't check that syntax for bugs so you're on your own there. Importmulti takes a bunch of args, most of which are optional.
I got the output descriptor for the address I was trying to spend from by runnning getaddressinfo on the address on the computer where the address was originally generated, and which therefore knew what the script was.
Hope that helps. Let me know if you have success!

Thanks for the details. This is helpful although I want to know if this is possible from GUI which also has an option to create unsigned tx. And if it doesn't work then it's a bug which needs to be fixed. I have also created an issue in github repository but no response yet: https://github.com/bitcoin-core/gui/issues/94

You can create PSBT from the spend screen of the GUI as of Bitcoin Core v20:
https://bitcoin.org/en/release/v0.20.0#gui-changes
This GUI button only shows up if you have created a wallet that does not contain private keys, which is what you did. I do not know how to import watch only addresses (or scripts) via the GUI.

The PR: https://github.com/bitcoin/bitcoin/pull/16944 mentioned in the release notes looks good and it should work. Maybe I will ask the author of this PR on github.

I think you can find solutions about unsigned TX and PSBT
Wallets and resources here:
https://github.com/encryptdr/EnkryptWallet
Wallet supports unsigned Bitcoin transactions


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

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

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

Pair HW wallet to Electrum

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

Import the transaction to sign in Electrum

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

Find low-fee peers

addnode to connect with the low-fee peers discovered

sendrawtransaction to broadcast transaction

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

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

This answer could be improved by giving an explanation in the introduction what one is looking at. I would suggest you add something at the top along the lines of "yes, it is possible to use a lower fee rate. <how does that affect relay, confirmation, other tradeoffs>, then: here is one way I found to do it:".

@Murch made some changes

Good improvement! I've condensed it a bit by paraphrasing the question in the answer, and removing the quotes. Please feel free to roll back or edit further, if you liked the original better.

You can "create, sign and broadcast a transaction with fee rate less than 1 sat/vbyte" but there is a minRelayTxFee set by default to be 1,000 satoshi per kB and a dustRelayFee defined here. So if you want your transaction to be relayed by nodes on the network you need to be careful not to drop the fee too low as not only will it not propagate across the network but it also won't end up in a mined block.

This answer could be improved by being more explicit about the limit that should not be undershot for "not to drop the fee too low".


text:
Create unsigned tx (PSBT) in a watch-only wallet using bitcoin core, sign it in electrum and broadcast using bitcoin core
What are the steps that we can follow to create an unsigned tx for watch-only cold storage address using bitcoin core? How can we sign the transaction and broadcast it later?

Run the below commands in electrum console:

>> getaddresshistory('tb1qu2l4n8st9w3hhsxstd8muaxgnu63fql9rkylmd')
[
    {
        "height": 1807710,
        "tx_hash": "727707cced87f9bc2a1ca3ed28df39588e9881fd50c272e78bc76a5bb1ffde9c"
    }
]
>> deserialize(gettransaction('727707cced87f9bc2a1ca3ed28df39588e9881fd50c272e78bc76a5bb1ffde9c'))
{
    "inputs": [
        {
            "coinbase": false,
            "nsequence": 4294967295,
            "prevout_hash": "99ebe2d047c545a50cf86f0ff5f4c0648437cb8724137f1a33c2f06eb06ef35a",
            "prevout_n": 1,
            "scriptSig": "",
            "witness": "0247304402206379d344d75fbee07f54213378f95e44dc757872d59a35efbc14ec7e1ca7dfd102207a47f9c1be39cafa8f9ac8a879e2b968e2359bead23a1f6598478ed7d141c73d012103ee169045615c663c0204472f86e3c2b2ae43e574146d30607c42fe6d670ac7be"
        }
    ],
    "locktime": 0,
    "outputs": [
        {
            "address": "tb1qu2l4n8st9w3hhsxstd8muaxgnu63fql9rkylmd",
            "scriptpubkey": "0014e2bf599e0b2ba37bc0d05b4fbe74c89f351483e5",
            "value_sats": 3000000
        },
        {
            "address": "tb1q7sx47sra5w7kw8we5xeusl4089ryverhjcft6q",
            "scriptpubkey": "0014f40d5f407da3bd671dd9a1b3c87eaf3946466477",
            "value_sats": 61797954
        }
    ],
    "version": 2
}

You get the scriptPubKey in above output which can be used in importmulti command in bitcoin core:
"address": "tb1qu2l4n8st9w3hhsxstd8muaxgnu63fql9rkylmd",
"scriptpubkey": "0014e2bf599e0b2ba37bc0d05b4fbe74c89f351483e5"
Get the public key of the address from details:

If you are using bitcoin core wallet instead of electrum in this example, you can run the getaddressinfo command in console to get scriptPubKey and pubkey of the address.
Run the below command in bitcoin core console to import the address with the details copied from electrum:
importmulti '[{"scriptPubKey" : "0014e2bf599e0b2ba37bc0d05b4fbe74c89f351483e5","pubkeys" : ["0304c5184085eea27a072628de03fbb953f5fdd99fb526f097fdd4c6968d165f1a"],"timestamp" : "now","label" : "watch-address-test", "watchonly": true}
You can ignore the steps mentioned above for scriptPubKey and only use the "Public Key" of an address by using descriptor:
We need checksum in importmulti which is returned in descriptorinfo for the public key mentioned

Next, we can run importmulti command (I have used public key for a different address in this command):

importmulti '[{"desc" : "wpkh(026641b79d7ffa40ddf994f0277c2649f3ddcbd871194ba6ef87687daea22ca503)#zl4yt8hu","timestamp" : "now","label" : "watch-address-test", "watchonly": true}]'

rescanblockchain 1800000 1835099
I can see available inputs in GUI:

We still get an error if trying to create an unsigned tx which involves sending some amount to change address because we aren't trying to spend the whole balance.

Add a change address for creating unsigned tx:

Option to copy PSBT:

Load transaction using the copied text in electrum:

Copy the hex of signed tx and run the below command in bitcoin core:

sendrawtransaction 020000000001019cdeffb15b6ac78be772c250fd81988e5839df28eda31c2abcf987edcc0777720000000000fdffffff02b3410f0000000000160014112c8ecb9e0876a645e7b8e89eed83bd61096e2c80841e00000000001600145f24e8fbfe65840c27dad3b053855de4cee843820247304402200d7cc29a8588c180e6a460e0eb88ea830db76dbb040a875d45fe8c64c9509a80022060879365af1c6d19e7c47bdbfa402a053ed42809c52db6816cd249dff46529b001210304c5184085eea27a072628de03fbb953f5fdd99fb526f097fdd4c6968d165f1a5f001c00

It returns the transaction id: 4890c14e7635a3e72320046645686052339e443eba56e5a62849a48b3f67f419
You can check the details in a block explorer: https://blockstream.info/testnet/tx/4890c14e7635a3e72320046645686052339e443eba56e5a62849a48b3f67f419
Related questions:
How to create unsigned tx in a watch-only wallet?
How to move/sweep your Bitcoin Core bitcoins safely and air-gapped to your new fancy cold storage?
Related issues:
https://github.com/bitcoin-core/gui/issues/94


text:
Anyone tried building bitcoin core with visual studio 2019?
I followed the steps mentioned in the below link:
https://github.com/bitcoin/bitcoin/tree/master/build_msvc
Trying to build from https://github.com/bitcoin/bitcoin/tree/0.20

Errors:

Error   C1083   Cannot open include file: 'QApplication': No such file or directory bitcoin-qt  \bitcoin-0.20.1\src\qt\bitcoin.h    12

Error    MSB3073 The command "C:\Qt5.9.8_x64_static_vs2019\bin\moc.exe  "..\..\src\qt\test\addressbooktests.h" -o .\QtGeneratedFiles\qt\moc\moc_addressbooktests.cpp" exited with code 3.    test_bitcoin-qt \bitcoin-0.20.1\build_msvc\test_bitcoin-qt\test_bitcoin-qt.vcxproj  103

Error    MSB3073 The command "C:\Qt5.9.8_x64_static_vs2019\bin\moc.exe  "..\..\src\qt\bitcoinamountfield.cpp" -o .\QtGeneratedFiles\qt\bitcoinamountfield.moc" exited with code 3.   libbitcoin_qt   \bitcoin-0.20.1\build_msvc\libbitcoin_qt\libbitcoin_qt.vcxproj  168

Related Questions:
building bitcoin-qt.exe using Visual Studio 2017
Environment for building Bitcoin core in Windows
https://bitcointalk.org/index.php?topic=5264661.0
https://github.com/bitcoin/bitcoin/issues/17864

Are you trying to build Qt as well or just Bitcoin Core? If you don't want to build Qt you can download a pre-built version from https://github.com/sipsorcery/qt_win_binary.

I want to build qt as well

Building Qt on Windows is a major challenge and not related to Bitcoin. The instructions in the readme on the GitHub repo I posted above will be able to get you started. It literally took me weeks to get the right configure options to produce a build that matched what Bitcoin Core needed.

And just to add I'd highly recommend using the pre-built Qt binaries I've put on that repo as a starting point. Once you can build Bitcoin Core then the next step would be to attempt to build your own Qt binaries and switch to them.

The process of migrating the Bitcoin Core project to the CMake-based build system is currently underway. Once completed, it will enable flawless building of Bitcoin Core using Visual Studio.


text:
Was bitcoin peer to peer network affected because of the recent BGP hijack incident?
Can someone ELI5 BGP hijacking, impact on Bitcoin, countermeasures and if there were any issues because of the recent incident?
Related links: https://twitter.com/ProtonMail/status/1311013829514539011
https://twitter.com/troyhunt/status/1311792730046033920
https://hackingdistributed.com/2017/05/01/bgp-attacks-on-btc/
https://www.wired.com/2014/08/isp-bitcoin-theft/
Related question: Could the BGP attack be used to split the Bitcoin network?


text:
DumpMempool() and LoadMempool() in src/validation.cpp
My understanding is that DumpMempool() saves the memory pool state (unconfirmed txs received from other peers and if any txs broadcasted from this node) to disk and LoadMempool() is used if this state is required. Is this correct or how does this work and what should be my approach if I am testing Dandelion (right now trying to solve conflicts)?
https://github.com/bitcoin/bitcoin/blob/3caee16946575e71e90ead9ac531f5a3a1259307/src/validation.cpp#L5139
This is what I see in mempool.dat file:

What exactly is happening in src/validation.cpp and what is saved in mempool.dat, when is this data required, what happens if there is an issue saving or loading data from the file?

What exactly is happening in src/validation.cpp and what is saved in mempool.dat, when is this data required, what happens if there is an issue saving or loading data from the file?

The current mempool of a node is kept in RAM during node runtime. As node operators, miners, and users we want transactions that are in our mempool and our own priority for these transactions to be persisted across node restarts. Imagine you are a mining-pool operator and you lose the contents of your mempool. After a restart, you'd be at a big disadvantage compared to other mining-pool operators who can choose from a broader set of transactions to include in their proposed block.
The mempool.dat file is a snapshot of your mempool at a given time. It's read with LoadMempool() on node startup and transactions are added to the node's mempool. On node shutdown or via the RPC savemempool the DumpMempool() function is triggered. This writes a current snapshot of the nodes mempool into the mempool.dat file.

Warning: The file format is internal to Bitcoin Core and can change without deprecation nor prior notice. The following describes the contents of a version 1 mempool.dat file (see the constant MEMPOOL_DUMP_VERSION).

The mempool.dat file contains a header that consists of a uint64 version number and the number of transactions contained in the file stored in a uint64 as well. This is followed by a vector of mempool entries. An entry consists of the raw transaction, the time it entered the nodes mempool as int64, and a fee-delta as uint64 used for manual transaction prioritization for miners. The vector of entries is followed by a serialized map of txid -> amount which stores miner transaction prioritization information as well.
On start-up, the Bitcoin Core node tries to import the transactions in LoadMempool(). Some transactions are ignored during import:

transactions that expired in the meantime (transactions default to expire after two weeks unless the node configuration is changed).
transactions that already confirmed in the meantime
transactions that are already in the mempool (e.g. a peer already send it to us before we could import it)

Usually, something like this can be found in the debug.log file:
Imported mempool transactions from disk: 463 succeeded, 10 failed, 0 expired, 0 already there..

If the file is damaged or does not exist no transactions are loaded to the mempool. If the file can't be written during a shutdown, then the node simply can't load any transactions during its next start-up. This is only a real issue for mining-pool operators, but not normal users.

I've held a presentation on theLoadMempool() and DumpMempool() functions at the 2019 Chaincode Sumer Residency. The slides can be found in Google Slides or as PDF.

Awesome! Thanks for all the details and slides link :)


text:
Links for websites that were used to show miners signaling support for segwit
Anyone got links for websites that were used to show miners signaling support for segwit? or screenshots?
Also wanted to confirm if my assumptions are correct about the whole thing:

Initially BIP 9 was supposed to activate segwit but there was lot of controversy
BIP 91 was proposed but again controversy
BIP 148 was proposed and everyone agreed to activate BIP 91
Finally BIP 141 was used to activate segwit

That's not really correct. All of those BIPs were involved. BIP 9 described the concept of using version bits to signal for activation. The segwit consensus rule BIP141 used BIP9 for activation. BIP148 proposed activating BIP141 without waiting for its BIP9 signalling, after a certain date. Before that could happen, BIP91 proposed a new rule (with reduced signalling requirements) that once activated, would force miners to signal for BIP141's BIP9 activation. That also happened: BIP91 got signalled for, which activated, and miners then followed up by signalling for BIP141, which activated.

Thanks @PieterWuille for the details

On Pieter Wuille's website there are graphs about the Bitcoin network.
These feature graphs of the block version (used for version bit signaling) across time.

Okay found one website and got relevant images in web archive: https://web.archive.org/web/20170722094209/https://www.xbt.eu/


text:
What are some of the GitHub alternatives that you consider for Bitcoin Core and other Bitcoin related projects?
Time for Bitcoin Core and other bitcoin related projects to look for GitHub alternatives?
Some of the issues:
https://techcrunch.com/2019/07/29/github-ban-sanctioned-countries/
https://twitter.com/lrvick/status/1320246266270519297
https://twitter.com/jonatack/status/1315623229747322880

There is a GitHub issue here that is probably better suited for this discussion. I can't imagine anything other than GitLab will be seriously considered. We don't want to experiment with immature platforms or make a habit of jumping around. I could be wrong though. https://github.com/bitcoin/bitcoin/issues/20227

A list of some GitHub alternatives is here.

GitLab
BitBucket
SourceForge
Launchpad
Google Cloud Source Repositories
AWS CodeCommit
Phabricator
Gogs (Self-Hosted)
Gitea (Self-Hosted)
Apache Allura (Self-Hosted)

This GitHub Repo Full Downloader written by Andrew Chow may also be of interest.
Discussion on whether to move from GitHub and where to move to should be had on IRC and GitHub rather than here. StackExchange isn't set up for discussions and conversations and it will get very noisy if everyone expresses a view here.

Thanks for sharing the alternatives. IRC- I don't have good experience. Asked two questions: Dandelion and Android IRC client. Got no response from anyone. Most of the time it's dead and looks like only few people talk between themselves. I was avoiding GitHub because discussing controversial things on GitHub that involve GitHub may lead to censorship of issue or me getting banned.

Lots of channels that are very active. Maybe you were just unfortunate at the times you posted. Anyone will generally get a response on #bitcoin-core-pr-reviews from my experience.

Yes there have been lot of issues recently related to GitHub.
Alternatives: gitlab and radicle


text:
Issues decoding the words to transaction hex
I had asked a question earlier about compressing the transaction hex as it was used in a project that involved sending text messages (160 characters limit per message):
Compress transaction hex string
So I have used a different approach and here's the project details: https://github.com/prayank23/OfflineTx
Converting transaction hex to words is working as expected. I have issues decoding the words to transaction hex using python code mentioned here: https://gist.github.com/grubles/41a8ab74afe2cee6ef7128b07438455b
It doesn't return the last 4 characters when trying to decode the words.
Values used in this example:
Tx hex: 02000000000101e939fb23e9991ebbc75fd08c736da32ca12d98a4ff1b8e970e97f5661927ee410100000000fdffffff02b0a90a000000000016001421e2f997b3bd36e273eaca365da8515a389444ae40420f0000000000160014829e2dbcf6b7f31bc93633971f71f6f6b9b5f89e0247304402200f8e3e573be749caf1964a85707bf540de2e7b367ae46c23bd4f21932ff82346022062dc3007072cd5a19b45e479525f4829bc48be4fd3c21b5a9ae34bcf9a3a3ccf0121020f88c7db36cbb492e80d3062fc19db55bed82687498f8cfe6d0cf47adf6687aa49f31b00
Words: answer frost position wrote message message actually calm energy iron dust valley music rock core blink regret frighten wife moonlight weave shove pride add mystery veil press gentle collapse aunt like like like skin tool patient dirt muscle holy like like like apple also also goodbye bone raise women along rainbow approach caught drag radio concern rose hate great yell worse forever stuck like like like alive bid tool shy flood truly house knock fade blow paint forest street stain mock never murder plant void history sentence rant often loose often utter book explain born point throughout hero gone worship closet canvas please sanctuary too although upon truly shimmer wow rather laugh simply twenty creation take garden innocent bench kiss companion reveal nine shall stolen angel dark candle dew anymore disguise darling happiness bound treat morning group weave stand grown ourselves rhyme bowl consider grace worse other torment like half law shower fruit reality dread third barely enough nail match rare manage tower honor ready

Grubles shared the reason why this didn't work and I had issues while decoding in this tweet thread: https://twitter.com/notgrubles/status/1336709747756724227

Required the hex to be divisible by 8 basically. If it wasn't the encoder would chop off the remainder. So when you would go to decode the words, you would end up with more or less the same result as you began with but with some bytes missing at the end.

New and improved hex to mnemonic encoder/decoder based on Joe Reuther's script. Mainly useful for camouflaging bitcoin stuff (addresses, PSBTs, etc) or for moving transaction data between online and offline computers w/o using QR.
https://gist.githubusercontent.com/grubles/69762512cd4e954722c03a0df1bc44ac/raw/b1a4d85dd70bfc972a6ab05a93d3432bf300d1b6/pgp-words-improved.py

The last word is a checksum and contains no entropy or key material. When you go from hex to words, it adds a checksum at the end. When you go from words to hex it drops the checksum as it is only there as a safety check and is not needed for converting into a public key or signing transactions.

That is a good hint I guess. But I am still trying to figure out how to resolve this and what should I change in decode()

The issue is resolved using a different script: https://twitter.com/notgrubles/status/1336743010068000768


text:
Dandelion++ for Bitcoin
Dandelion BIP: https://github.com/bitcoin/bips/blob/master/bip-0156.mediawiki
The article that I read about Dandelion++: https://www.monerooutreach.org/stories/dandelion.html
It mentioned that Dandelion++ was developed for Bitcoin. So do we have a BIP for it and plan to implement in Bitcoin Core?

Though Dandelion++ was explicitly developed for Bitcoin, it was recently applied to Monero by developer Lee Clagett (vtnerd), with testing and review by developer moneromooo

There is a bip. https://github.com/bitcoin/bips/blob/master/bip-0156.mediawiki

That's Dandelion. The question is about Dandelion++

And just realized we don't even have Dandelion in Bitcoin Core: https://github.com/bitcoin/bitcoin/pull/13947#issuecomment-513858189

I haven't looked into it but Dandelion++ may be addressing some of the problems with Dandelion. Dandelion++ doesn't necessarily mean Dandelion implemented first and then Dandelion++. As far as I understand Dandelion is dead for some of these reasons https://bitcoin.stackexchange.com/questions/81503/what-is-the-tradeoff-between-privacy-and-implementation-complexity-of-dandelion

@MichaelFolkson I think BIP 156 is for Dandelion++ as darosior mentioned. Still reading everything and maybe will try few things today.


text:
Better fee estimation and fee/tx/mempool management in wallets
Right now mempool has 65 MB of transactions waiting for miners to be included in blocks. 90% of the transactions are below 10 sat/vbyte.

I am observing this trend from last few days and think it will settle once we have couple of days with less people looking to use higher fee rate for quick confirmations. It can take few days to weeks. Is there a better way for wallets to manage transactions and fees so that people realize that they are paying more than 10x fees. Its difficult to educate everyone about using different tools and websites, not easy to convince exchanges to use segwit, rbf, maybe even cpfp, batching, LN, Liquid etc. and I think we can manage mempool and fees in a better way if most of the wallets experiment with solutions to solve this problem.
How can we solve this problem?

You are right, after about three years, we only achieved about 11% of native segwit usage, ~ 1000 BTC locked in public lightning channels, RBF/CPFP usage is about 15%/10%.
Unfortunately, most people don't care much whether they pay $0.02 or $0.2 in fees. They only start caring when fees are much higher than that. Since January 2018, we have only had that at a much lower level in April-June 2019 and at the end of October/start of November 2020. Which allows most users to just wait for the congestion period to resolve. In order to have a real change, I think we will need a real congestion period the likes of those in 2017 or even worse.
I am creating a service that will make it easy for wallets/custodians to optimize the fee of their transactions. The way it works is that users relay RBF pre-signed transactions that pay for different fees. The service then optimizes the fee by smartly broadcasting these transactions. It's already live, in beta: https://bitpost.co Anyone can try it out by following this tutorial: https://docs.bitpost.co/basic/quick-start There is a testnet version of the service too.

Interesting. Will have to try this in next few days.

I am willing to help with any issue/question you might have, already contacted you through twitter DM.


text:
What is spacechain?
I am interested in experimenting with layer 2 solutions like Lightning, Liquid, Rootstock etc. Is "spacechain" a new concept and how does it improve Bitcoin ecosystem?
What are space chains? How is it different from sidechain? What are its use cases? Where can I read more about it?

Spacechains are a combination of two ideas, blind merge mining and perpetual one-way peg. The combined concept is called space chains.
Mentioned few points from the transcript of Youtube Video by Ruben Somsen: https://www.youtube.com/watch?v=N2ow4Q34Jeg

So the key points are we're going to create some kind of blockchain but we're going to do it by outsourcing mining to the bitcoin blockchain with only a single transaction per block so there's not going to be a lot of overhead on the bitcoin blockchain.
It's going to be a trustless chain. Multiple trustless chains as many chains as you like that can be created in a permissionless way and they essentially serve the bitcoin ecosystem there's not going to be any altcoin trying to be bitcoin.
No speculative asset involved. This is hopefully going to open a door to more permissionless innovation where essentially anyone can create blockchains that serve the bitcoin ecosystem.
One caveat that needs to be said is its not a two-way peg so this is not going to be a system where you take your bitcoin you move to a space chain and then you do your thing there and you move back.
Comparison with "sidechains" concept : The one it doesn't hit on is there's no trustless two way back. However it allows permissionless chain creation without another speculative asset and it serves the bitcoin ecosystem. I think that is one of the dream of what sidechain idea was all about.
What is a Blockchain? It's an open database essentially but it's an open database that is rate limited by sacrifice and in the case of bitcoin obviously the sacrifice is proof of work. Essentially anyone can create a block, if too many blocks come in at the same time or within a certain time frame the difficulty goes up so this naturally rate limits how many blocks can be created. This ensures that even though it's an open database that anybody can add data to there's never going to be too much data there's only going to be roughly two megabytes every every 10 minutes right now. So the interesting thing is that the resulting scarcity at least in the way bitcoin did it can be tokenized because there can only be one block every 10 minutes on an average.
One interesting thing quite underappreciated is that Satoshi came up with a way to do mining or leave it to other people to do mining. The importance of it cannot be understated as you don't have to take your transaction and put it into block yourself, mine it but what you can do is just add a fee and anyone can take it you after you send it over through the p2p network. Anyone can take those transactions put them into a block and claim the fee for themselves if they're successful and that's a non-interactive process. It is really one of the key things that makes bitcoin work and maybe it looks obvious in hindsight.
So roughly what we're trying to do here is create yet another blockchain or multiple blockchains but we want to skip the tokenization step as we don't want to create yet another another altcoin.
Everything else we kind of need for "spacechain". We need an open database that's rate limited by sacrifice and we need some kind of way to outsource the mining where we just send our transaction and somebody else puts into a block for us so these two features are basically what we're going to try and recreate.
The mechanism I am using here to create a blockchain is called blind merge mining. Essentially you use the bitcoin blockchain or use bitcoin to simulate or emulate mining. Maybe I burn a bitcoin or maybe I lock up my bitcoin or maybe I waste a bunch of block space in the background blockchain which is a
terrible idea don't do that but it works. Fee bidding is in my opinion the better of these options although they all can work to some extent and the reason for that is very space efficient and it's fully incentive compatible where if somebody tries to censor you it essentially works the same way bitcoin works where it's costly to censor somebody. In terms of space efficiency as I already told you what we're going to get it down to one transaction per block. So there's also regular merge mining and I have to specify that it is better than regular merge mining because with regular merge mining you need bitcoin miners to essentially participate, run the software and create blocks for you and here in this system anybody can create a block, anybody can propose it to the miners and the miners just take whoever pays them the most in bitcoin fees.

All the slides related to "Spacechains": https://docs.google.com/presentation/d/1QbLS6-OLhkNlZVrHme843NM0AyPWz-qU3OYLEsOzByA/edit
Usecases:

Create tokens
Decentralized DNS without an altcoin
Trust minimized stablecoin
DEX, DAO and other Decentralized Finance applications you can think of

Reddit post: https://www.reddit.com/r/Bitcoin/comments/kbwzxg/spacechains_permissionless_blockchains_for_bitcoin/


text:
What is Wrapped Bitcoin WBTC?
I have read on twitter that WBTC has solved bitcoin scaling issues. Is it true? I want to know more about WBTC

Disclaimer: I worked at BitGo when WBTC was kicked off, but I didn't work on the WBTC project.
Wrapped Bitcoin (WBTC) is an ERC20 token fully backed by bitcoins held in BitGo's custody. BitGo mints new WBTC when bitcoins are deposited into custody and WBTC is burned when bitcoins are withdrawn from custody. WBTC is a means to get an IOU for hard money into the ETH ecosystem.
As a "scaling solution", it fits somewhere between a sidechain and payments between two user accounts on a custodial service:

There is no "BTC on ETH", all bitcoins are held by BitGo (or other custodian if another gets added). WBTC is a promissory note for the assets held by BitGo.
Payments using WBTC do not interact with the Bitcoin blockchain, they happen on the ETH network
WBTC can be freely sent and received on ETH
The WBTC token cannot be trustlessly redeemed for bitcoin, entering and exiting WBTC requires actions by BitGo

As ETH is still figuring out its monetary policy, the ETH ecosystem lacks a hard money. WBTC is frequently used to represent Bitcoin's value in the ETH ecosystem. Under the assumption that WBTC is a faithful representation of Bitcoin balances and since WBTC payments do not consume Bitcoin on-chain resources, one could consider them a scaling technique. Representing WBTC as "the scaling solution" for Bitcoin is a silly misrepresentation.

WBTC does not scale Bitcoin
Bitcoin has its own on-chain and off-chain scaling solutions
You can read more it here: https://bitcoin.stackexchange.com/a/100177/
WBTC refers to Wrapped Bitcoin (WBTC) and is an ERC20 token on other Chain which has nothing to do with Bitcoin or scaling Bitcoin.
Bitgo is a custodian for WBTC: https://blog.bitgo.com/wrapped-btc-launches-with-bitgo-custody-and-full-proof-of-assets-c7fbf21e4a66
You can lock bitcoin in multisig and issue any tokens on other chains to do fancy things which has tradeoffs and trust assumptions. This token will never be same as bitcoin and do not consider it as decentralized or censorship resistant or anything that solves bitcoin scaling issues.
Last thing which non-technical users may find difficult to understand when they read "BTC on XYZ"

All BTC are on Bitcoin blockchain. Yes they are used in different projects and some of them issue their own tokens as well.


text:
What is the new segwit network option on binance and how does it work?
Recently Binance announced support for segwit deposits. I see old address and lot of other options on the right with segwit in the end. Is it a new network? What are the other options mentioned on Binance to deposit BTC and are they similar to segwit?

Other questions on this site answer what is SegWit and the benefits of SegWit. I don't see why Binance specifically is brought into this. So that's three of the four questions that should be closed if looked at individually. I'd be open to a question on what wallets support SegWit although given that it changes all the time the information would quickly become stale without regular updates. Hence voting to close.

Closing doesn't help anything. Thanks for your contribution. I was expecting considering your votes on my questions in past and one of the reasons I post less questions and more answers here.

Hmm a touch bizarre response. I've reached out to you privately.

Please make your question more focused. There are 4 questions here, and some of them already have good answers in this site.

I have edited the Question. Hope this looks better. I obviously know the answers to all and thats why answered it myself but intention was to share the misleading options available there to deposit BTC and how segwit is mentioned as a separate network. I mentioned all questions a newbie would have if looking at such option for the first time.

User: How do I send BTC to 0x address?https://i.ibb.co/0fr5m2K/Screenshot-20201228-042037-01-01.jpg Binance Support: Sir BTC fees are high so this is new network with low fees. Change to some wrapped token and use it.

Not sure if you realize or not this affects Bitcoin and Segwit adoption

On 2020-12-24, Binance announced support for deposits to native segwit addresses.
Segregated witness ("segwit") refers to a soft fork that activated a series of Bitcoin improvement proposals (BIPs) in 2017. Among other things, segwit introduced two new standard output types, Pay to Witness Public Key Hash (P2WPKH) and Pay to Witness Script Hash (P2WSH). These native segwit outputs are more blockweight efficient than prior equivalent output formats, but wallets had to be updated to create them.
After three years, receiving payments to native segwit addresses is considered best practice, and almost all wallets and services are able to send to native segwit addresses.

Segwit is not a separate network as mentioned in the screenshot instead its a Bitcoin protocol upgrade that provides lower transaction fees. This is also mentioned in the "Tips" section on same page in Binance.
Segwit is defined in BIP: 141,143,144,145 and 173 according to my understanding. In this context its just an address type you will use for BTC deposits on Binance.
Most of the open source and self-custodial wallets support segwit. Example: Bitcoin Core, Electrum, Samourai, Wasabi, Bluewallet etc.
Other things mentioned to deposit BTC: BEP2, BEP20 (BSC) and ERC20 are not associated with Bitcoin. It is misleading and you will need tokens on other chains to deposit using those addresses which is not same as bitcoin.
You can read about benefits of segwit here: https://bitcoincore.org/en/2016/01/26/segwit-benefits/


text:
Why can't default minimum fee rate be changed to 0.1-0.2 sat/vByte?

Main question (focus on this incase you are looking to close it as "needs focus"): Why can't we change default minimum fee rate to something below 1 sat/vByte?

It was done in past: https://github.com/bitcoin/bitcoin/pull/3305 why not again?

Why does nobody respond to comments in this pull request? https://github.com/bitcoin/bitcoin/pull/13990 Do I need to be from some OG devs group or from blockstream or chaincode labs to contribute and discuss? Or some PRs are intentionally kept pending because a certain group doesn't want things mentioned in it?

Do you think it will result in spamming? I don't think so and few other people as well: https://www.reddit.com/r/Bitcoin/comments/kjrbny/should_default_minimum_fee_rate_be_01_satvbyte_now/ggyym67

The primary reason for the minimum feerate (and related things like the discard feerate) is preventing the use of the P2P network as a cheap global broadcast system. If it's easy to produce transaction that will never confirm yet will relay across the network, it'd open the network to abuse. I don't know what the right level is to make sure that doesn't happen, but 1 sat/vbyte seems pretty low.

That was before the network and mempool logic had floating fees. Now the feerate is primarily set by market pressure, and lowering the minimum would at most have an impact during times when there is ~no demand for block space. I personally think the ecosystem should expect to function fine when there is continuous back pressure, so I'm not sure what is gained by reducing it.

I can't speak for anyone else, but I don't think it's interesting to spend review time on. Note that the PR you link to is just to increase precision of the internal data types used for feerates; it doesn't change any relay policy.

I don't think spam is the problem. Lately the feerate has been significantly higher than 1 sat/vbyte anyway, and long term I hope that whatever the minimum is set to, it's effectively never hit. What matters is the discard feerate, which is not set by the market (it's the "additional" feerate you need to pay to replace a transaction in the mempool through RBF or mempool limiting, in order to make sure there is some cost to relaying the transaction that is now expected to not be mined anymore). That discard feerate is by default set to 1 sat/vbyte as well, which seems low.

Why can't we change default minimum fee rate to something below 1 sat/vByte?

I think I'm reading in sipa's answer the number is simply set arbitrarily low enough so that spam is not a problem.
If that's the reason, I suppose the answer to your question is "we actually can change it".
We could set it to 0.2 sat/vByte like you were writing about, then wait and see if that's still preventing spam.
If that still prevents spam, people would be saving in fees. That's good, pretty good. And if it doesn't disincentivize miners from mining, I suppose it'd be just good enough.
But, would the maintenance effort be worth it?
I suppose a majority of current participants can agree that wouldn't be worth it.
The future is unwritten.

Minimum fee is policy, can be lowered and raised with low disaster risk.


text:
What is a softchain?
What is softchain and how is it different from drivechain? What are associated tradeoffs and feedback from community?

What is softchain

Softchains: Sidechains as a Soft Fork via Proof-of-Work Fraud Proofs. Decentralized two-way peg sidechain design. Activating new sidechains requires a soft fork, hence the name softchains.
Ruben Somsen shared about a new concept "Softchain" on Twitter and Bitcoin Dev mailing list:
https://web.archive.org/web/20210101153139/https://twitter.com/SomsenRuben/status/1344770107017457664
https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2020-December/018331.html

how is it different from drivechain?

It's similar to drivechains, but without the major downside of having to rely on miners, since all Bitcoin full node users can efficiently validate each sidechain.

What are associated tradeoffs and feedback from community?

You can find few in the replies to the tweet shared above, Paul Sztorc's tweet and below links (mailing list):
ZmnSCPxj: https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2020-December/018332.html
Sergio Demian Lerner: https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2020-December/018333.html

It is good to include links but it would be better if the key points from those links was included in the SE answer rather than answering questions with links. e.g. "What are associated tradeoffs and feedback from community?" However, no resources on softchains on SE yet so upvoting the question.

I am still researching more about it and don't understand everything involved in softchains so preferred to link the resources for it. Will try to improve my answer in few days. Others can also answer or edit my answer.

Gotcha. I do similar. Better to have a draft answer up than nothing.


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

I would expect most of these to be considered confidential information.

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