text:
Best way to calculate difficulty of generating specific vanity address?
I'm now working at small tool, which purpose is to calculate difficulty (like number of attempts) of getting vanity address, like vanitygen (https://github.com/samr7/vanitygen) does. I've read some materials (https://en.bitcoin.it/wiki/Vanitygen#Difficulty_of_finding_a_vanity) and now i'm wondering about exact algorithm of how such calculation must be proceeded.  There is no precise answer in the article at bitcoin.it wiki, so a look through the sources of vanitygen and ended up with some very basic ideas:

All addresses are in a nutshell base58 numbers which can be converted to biginteger if needed.
There is one final "biggest" address (like biggest number in the end of some range)
Vanity address is any address from the range of addresses (if we think about them as numbers), that starts with specific pattern.

So what is the best way of finding difficulty of getting specified vanity address?
I ended up with such idea:

Find the biggest possible address and convert it to bigint.
Find addresses range for given vanity pattern. First of all find the biggest possible address in the range by adding z to the end of the pattern while it is smaller than biggest possible address. Then to get smallest address in range i decided to add 1 (base58 representation for 0) to the vanity patter and i failed to determine when i must stop. Clearly address could not be longer than 34 symbols, but when i must stop? I think that i must take length of the biggest address in the range and that will be the same length for the smallest. But please, correct me if i'm wrong.
When we have range of addresses, we can calculate it's length by subtracting smallest one from biggest one and then divide biggest possible address by range length and the result will be our difficulty.

So is it all correct?
What shall i do when pattern starts with "1"?
What additional materials you can suggest to read?

Vanity addresses should not generally be considered secure. Also to consider, vanitygen-plus lets you search for the private keys for a full address.

@Willtech do you have a copy of vanitygen-plus on your computer? can you host it somewhere?

@CQM It is hosted on GitHub there are a few repositories that seem to exist it is not a compiled application so you need the ability to run code. https://www.ecosia.org/search?q=GitHub%20Vanitygen-plus

So things turned out to be a little bit different. But now i have a solution, that seems to be workable and adequate.
Original task was to calculate difficult of finding specific vanity address (like vanitygen does).
Difficult is basically
number_of_all_possible_addresses / number_of_addresses_with_vanity_prefix rate.
So, for example if we have only dec addresses between 0 and 9999, difficult for finding vanity address, that starts with "1" will be 10, because 10000 is the number of all possible addresses and only addresses from 1000..1999 will match, so there are 1000 of them.
With bitcoin addresses things are little bit more complicated, but principal is the same.
First let's find out how bitcoin address is formed: in a nutshell there is a couple of steps, that are important for  our task:

Take one 0x00 byte (that will be first byte of address to represent it's version)
Take ripemd160 result (20 bytes, 160 bits).
Take first four bytes of sha256(sha256(ripemd160)) as checksum
Concatenate 0x00+ 20 bytes of ripemd + 4 bytes of sha256 of sha256 of ripemd
Now you get a 25-byte long something which you must treat as a long integer. We will call this number a "proto-address".
Base58Check it (but this is not very important now) and result will be the bitcoin Address.

However, what is important is understanding of the fact, that we can change only ripemd part. That leads us to two conclusions:
first is that there are only 2^160 bitcoin addresses and second is a little bit more complicated.
Let's find answer to an important question: If A and B are numbers that starts with the same digit and there is an X such as A < X < B does it mean that X starts with the same digit?
If A is 1000 and B is 1999 - yes it does. X can be any number from 1001 to 1998. But what if A is 100 and B is 10000? X can be any number between them and it must not start with the same digit. So A, X and B must have the same digit in the beginning only if they have equal number of digits. Keep it in mind, it is important.
Let's  figure out, what is vanity address and what is base58 encoding.
Base58 is like base16 and base2 and base10 and like every other base.
Symbol "A" for example is "A" in base58 and 0x09 in base16 or 9 in base10. That is a good point to start.
Let's decide that our address starts with "1A". We know that address is basically an integer of 25 bytes. What is "1A"? It is a "1A" in base58 and 0009 in base10. Or just 9.
That means that every number, which can be divided by 58 and will have a quotient equal to "9" will give us an "A" symbol during base58.
For example 522/58 == 9. 30276/58/58 == 9. But not only those numbers will end up with 9, but these ones too:

9*58 + 58 -1
9*58^2 + 58^2 - 1
9*58^3 + 58^3 -1
or just any (9 + 1)*58^N -1 number

So the formula is for the beginning of the range:
prefix*58^n
for the end of the range:
(prefix + 1)*58^n -1
Here comes an idea: we must find all ranges of numbers that will meet those requirements:

Number in the beginning of range and number in the end of range have equal number of digits
Lengths of these numbers must be equal to the length of proto-address. This is important because we must have an integer 25 bytes long that starts with a zero byte, it is the law!
Their values must be less than 2^192, because leading byte is always 00 and we have only 25 bytes, which leaves us with only 24 bytes or 192 bits which value we can change.

When we find all these ranges, we can find, how many numbers there are in the range by simply subtracting beginning of the range from ending of the range.
The sum of all lengths of our ranges will be how many possible proto-addresses we can get.
But this is not the end. As we remember, proto-addresses are just all possible big numbers so not all of them can be converted to valid bitcoin addresses. But it is very simple to calculate how many of them can. Answer is 1/256^4. Why?
Because when we are generating bitcoin address, all we can change is the result of ripemd which gives us 20 bytes. Other 4 bytes are just checksum. Easy way to think about it is that we can have 2^192 proto-addresses and only 2^160 of them will be valid, because we can have only 2^160 valid bitcoin addresses. This gives us a 1/256^4 rate.
Final part: take sum of all our ranges lengths, divide it by 256^4 and this will be number of all possible bitcoin addresses with given vanity.
Just divide 2^160 by this number and this will be the result.
Lets illustrate it by finding difficult of A prefix.
A is just 9. Ok, lets find out all ranges, that will give us 9 as a quotient.
522 - 579
30276 - 33639
1756008 - 1951119
.......
we must go and go until length of our numbers will not reach 24 bytes (mind the leading 00 byte)
........
41735950621193504130037849728691446275009901558579068928 - 46373278467992782366708721920768273638899890620643409919
Both this numbers have length of 24 bytes.
This is our first range.
Next is
2420685136029223239542195284264103883950574290397585997824 -
2689650151143581377269105871404559871056193655997317775359
This numbers also are 24 bytes long.
Next pair will be
140399737889694947893447326487318025269133308843059987873792 and
155999708766327719881608140541464472521259232047844430970879
Both are larger than 2^192 so now we must stop.
lets sum our results:
46373278467992782366708721920768273638899890620643409919 - 41735950621193504130037849728691446275009901558579068928 + 2689650151143581377269105871404559871056193655997317775359 - 2420685136029223239542195284264103883950574290397585997824 = 273602342961157415963581459332532814469509354661796118526
This is how many possible proto-addresses we can have. But do not forget to divide it by 156^4 and get:
63703009616853067642911677093369144589991624155
And this is how many possible bitcoin addresses we can have.
Now just divide 2^160 by this number and the result will be 22
This is difficulty for prefix "A" or "1A".
Now let's talk about some special cases. What you must check, when working with ranges is:

length. Length of range must be equal to the length of proto-address and you must count all suitable ranges.
2^192. if end of the range is more than 2^192 you must cut this range from the top by value of 2^192 - proto-address can't be larger than 2^192. Also remember that beginning of the range must be always less than 2^192 (if not that does not make any sense).

What about special cases? Like patterns that start with more than one "1"? it is a little bit tricky, but not very complicated. "1" is a special case in base58 cos it is equal to 0. That means, when there are some "1"s in the beginning - all this bytes must be zeroed and can not be used. So our proto-address, if we want to start it with two "1" must have two zero bytes in the beginning. Like 0000XXXX....
if we want to have 111 we must leave 3 bytes as zero bytes in the beginning and so on.
What does it mean? Each 1 will cut one byte from our proto-address, so it will cut length of our possible biggest proto-address number by 8 bits or by one byte. That will make it 256 times harder to find and one byte shorter.
Like if we want to have 11 in the beginning we will have only 23 bytes to generate our ranges and if we want to have 1111 it will give us only 21 byte. So our ranges will be much smaller and difficult will be much higher. And obviously it is not possible to find any address if we have more than 19 "1" in the pattern, cos we must leave something to the ripemd result :)
If pattern starts only with 111, just count number of  "1" and assume that beginning of range is 0 and end of range is 2^(200-8*number_of_1's) because we have only 200 bits for proto-address and some of them must be zeroed in case of our 111(1)-like pattern.
if we have pattern like 11(1)X(X) where X is non-zero symbol, just short max possible proto-address by number of bytes equal to number of 1's and do ordinary calculations.

Here is my solution which works fine for most cases, except contains only 1-s and very long prefixes:
function complexityForBtcAddressPrefixWithLength(bytes prefix, uint length) public pure returns(uint) {
    require(prefix.length >= length);

    uint8[128] memory unbase58 = [
        255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
        255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
        255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
        255, 0, 1, 2, 3, 4, 5, 6, 7, 8, 255, 255, 255, 255, 255, 255,
        255, 9, 10, 11, 12, 13, 14, 15, 16, 255, 17, 18, 19, 20, 21, 255,
        22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 255, 255, 255, 255, 255,
        255, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 255, 44, 45, 46,
        47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 255, 255, 255, 255, 255
    ];

    uint leadingOnes = countBtcAddressLeadingOnes(prefix, length);

    uint256 prefixValue = 0;
    uint256 prefix1 = 1;
    for (uint i = 0; i < length; i++) {
        uint index = uint(prefix[i]);
        require(index != 255);
        prefixValue = prefixValue * 58 + unbase58[index];
        prefix1 *= 58;
    }

    uint256 top = (uint256(1) << (200 - 8*leadingOnes));
    uint256 total = 0;
    uint256 prefixMin = prefixValue;
    uint256 diff = 0;
    for (uint digits = 1; prefix1/58 < (1 << 192); digits++) {
        prefix1 *= 58;
        prefixMin *= 58;
        prefixValue = prefixValue * 58 + 57;

        diff = 0;
        if (prefixValue >= top) {
            diff += prefixValue - top;
        }
        if (prefixMin < (top >> 8)) {
            diff += (top >> 8) - prefixMin;
        }

        if ((58 ** digits) >= diff) {
            total += (58 ** digits) - diff;
        }
    }

    if (prefixMin == 0) { // if prefix is contains only ones: 111111
        // NEED TO FIX BUG HERE!!!
        total = (58 ** (digits - 1)) - diff;
    }

    return (1 << 192) / total;
}

function countBtcAddressLeadingOnes(bytes prefix, uint length) public pure returns(uint) {
    uint leadingOnes = 1;
    for (uint j = 0; j < length && prefix[j] == 49; j++) {
        leadingOnes = j + 1;
    }
    return leadingOnes;
}

Here are my successful tests:
makeIt('1AAAAA', 259627881);
makeIt('1QLbz6', 259627881);
makeIt('1QLbz7', 837596142);
makeIt('1QLbz8', 15318045009);
makeIt('1aaaaa', 15318045009);
makeIt('1zzzzz', 15318045009);
makeIt('111ABC', 15318045009);
makeIt('1111ZZ', 888446610538);
makeIt('111111X', 50656515217834);

makeIt('1B', 22);
makeIt('1Bi', 1330);
makeIt('1Bit', 77178);
makeIt('1Bitc', 4476342);
makeIt('1Bitco', 259627881);
makeIt('1Bitcoi', 15058417127);
makeIt('1Bitcoin', 873388193410);
makeIt('1BitcoinEater', "573254251836560363813");

And wrong tests:
makeIt('111111', 1099511627776);
makeIt('1111111', 281474976710656);
makeIt('1BitcoinEaterAddress', "1265736312036992302053249573170410");

With errors:
Contract: VanityBTC should test difficulty for 111111:

  AssertionError: expected '1103823438081' to equal '1099511627776'
  + expected - actual

  -1103823438081
  +1099511627776

Contract: VanityBTC should test difficulty for 1111111:

  AssertionError: expected '282578800148737' to equal '281474976710656'
  + expected - actual

  -282578800148737
  +281474976710656

Contract: VanityBTC should test difficulty for 1BitcoinEaterAddress:

  AssertionError: expected '1.265736312036992302053249062715592e+33' to equal '1.26573631203699230205324957317041e+33'
  + expected - actual

  -1.265736312036992302053249062715592e+33
  +1.26573631203699230205324957317041e+33


text:
How to programmatically determine the number of bitcoins ever deposited to a given address?
I am building an application for which I wish users to be given a unique address to which they can freely deposit funds into their account. Meanwhile, I want to be able to both track their balance and use the bitcoins they've given me. Their balance is effectively the total amount of bitcoins that their assigned address has ever received (regardless of if the coins have been spent) minus whatever I've charged them, and I need a way to determine the first bit.
Also, my server does not have enough storage space to use bitcoind, so I've been using electrum, though I'm fine using another piece of software or even a web api so long as it's reasonably secure.

Using electrum, after instantiating a Wallet instance, the code to achieve this looks like so:
def get_total_received(addr):
    """Returns the number satoshis ever received by this addr.
    Includes coins sent to this addr from this addr (eg change)
    and coins received by addr, but already spent"""
    load_interface()
    hist = wallet.get_history(addr)
    s = 0
    for tx_hash, tx_height in hist:
        tx = wallet.transactions.get(tx_hash)
        for out_addr, value in tx.outputs:
            if out_addr==addr:
                s += value
    return s

The main difference between this method and what is presented by blockchain.info as 'Total Received' is that if the address sends bitcoins to itself, this method will count those towards the total received whereas blockchain.info will not.
Note that this only works if addr is contained in your electrum wallet.

source: Stack Exchange

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

sort: votes


text:
Can I trace Website Addresses that a Bitcoin wallet has passed through?
first time posting here.
Please help. I have a BTC wallet address, and I would like to know to which websites/IP addresses this BTC wallet has been used to. Something like If I use this BTC wallet address on a certain website, can it be traced?
Thank you in advanced!

are you using an online wallet? Or do you have a wallet on your pc, and want to know if your tx from your pc can be traced by IP address?

Your bitcoin address and private key are created locally from a random seed and because there are so many possible addresses you can be very very very much sure that it hasn't been used by anyone else.
IP adresses or websites that have used a specific bitcoin address aren't recorded in the blockchain
Hope this answers your question!

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


text:
New to the world of Bitcoin
I'm an amateur who's yet to dive into the game of cryptocurrency. I've never even played around in stock markets. Ok so the price of Bitcoin fluctuates, and you can do things like buy, sell, trade, wire transfer, and even cash out. But here's my question.
Can I walk away from the table temporarily and come back in at a later time or date? I'm a guy that likes to pick his spots, sort of speak. Can you pull in and pull out as you wish? Or are my options only to remain on the table, buy, sell, trade our cash out?
I wouldn't want to have to buy back in at a higher price.

Can I walk away from the table temporarily and come back in at a later time or date?

Sure you can.
It isn't a perfect analogy, but think about bitcoin as if it were a dollar bill in your pocket. Some people will obtain a dollar bill, and then stash it away in a safe, not touching it for years. Others will take that dollar bill straight to the casino, keeping it on the table to bet and play with.
There is no requirement to continuously buy/sell, bitcoin is not some sort of game. It is just an asset you can own, and do with as you see fit.

Thanks, much appreciated. People in the Bitcoin community I notice are very helpful and generous. So since I can get in on the "live action" as I please.. what exactly is the proper term I'd be looking for in my account to "pause or freeze" my involvement temporarily?

Happy to help. I think you misunderstand what is involved though, it isn’t as if bitcoin is a game where you plug in/out of the live action. To own bitcoin, you’ll need a wallet of some sort, there are several types. You’ll need to choose one that suits your needs best, and transfer the bitcoins you purchase to an address from that wallet. For long term storage I would recommend looking at hardware wallets.

Oh I see. Yeah I guess everyone would be doing the same thing if it was that simple and easy to hit a "pause button" when the numbers decline while you wait for them to soar back up again. I'm an old fart lol. I have heard about those things like "virtual wallets", cold storage  flash keys, and paper wallets.. so I see what you're saying. Find something that suits my needs. Thanks again chytrik. Cheers!


text:
Bitcoin exchange where you can set your own wallet instead of using one provided by the exchange
I'm looking for a European based Bitcoin exchange where I can buy bitcoin and have them delivered straight to my private wallet. I basically want to avoid the extra cost of transferring the recently purchased coins from the exchange's to my own private wallet.
I know Coinmama works in such way (you have an input field where you fill the account you want the Bitcoin to be delivered to) but it's quite expensive and only take card payments.
Does anyone knows about such a platform?

Of course it is expensive, Coinmama charges a 5.5% transaction fee for each purchase + an additional 5% fee for credit card. I know of one exchange that doesn't charge network fee, but unfortunately they are USA-based.

You forget something. Who pays it then?

I basically want to avoid the extra cost of transferring...

That means that the people of the exchange have to transfer it for you and that means that they have to pay the fees because it's a default blockchain transaction and the miners want to be paid. And the exchange's owner does generally not want to donate you 20-30$ (average fees at the moment)
I don't think that there is such a platform you are talking about. Exchanges don't work this way

I just assumed using a normal exchange I was paying two transactions: one to buy/transfer the coins into the exchange's wallet and another one to transfer them from that wallet into my owns. But reading your answer i wonder: Maybe there's no network fee in the first transaction? Maybe this happens all inside the exchange's system?

If someone sells 1 btc to the exchange, the exchange notices: "This bitcoin is now our bitcoin!" and they save that information in their database. And if you buy that bitcoin, the only thing that happens then is: They edit the database-entry to "This bitcoin is ntonnelier's bitcoin", so that you are allowed to send it to your own adress. There is ordinarily no blockchain transaction if you do only trade and let the coins on the exchange.


text:
Is it possible to interact with the blockchain through bitcoin-core without a wallet?
Im running a full node and am developing an application that interacts with it. One of its features is users should be able to create a pair of Bitcoin PrivKey and PubKey. But for security reasons, I dont want to save them. Not on my wallet.dat, not on database. I want to create the keys programmatically and serve them for the user to manage them.
I don't see a way of doing this through bitcoin-core. How could I accomplish this? Is there a library I could use? Should I create my own methods? Can you think of a workaround?

I don't see a way of doing this through bitcoin-core. How could I accomplish this? Is there a library I could use? Should I create my own methods? Can you think of a workaround?

You can disable the wallet by passing --disable-wallet at compile time. I don't think that's what you're asking, though.
I'm guessing you want to be able to query the balance of an address, where the address unknown at the time of synchronization. Bitcoin Core can't do this efficiently, because it doesn't index transactions by address unless the address is in the wallet.
There are patches to Bitcoin Core that create an address index, but none are officially supported.

https://github.com/satoshilabs/bitcoin
https://github.com/btcdrak/bitcoin

You could also try one of these non Bitcoin Core solutions.
(Another approach would be to import the public key as watch-only, which would let you do this with Bitcoin Core. I don't know if that satisfies your security requirements, though.)

This is useful data @Nick ODell. Would you still use bitcoin-core to sign transactions having the user provide the PrivKey?

Yes. The signrawtransaction RPC command allows you to sign a transaction where you provide the RPC the private key. The private key will never enter the wallet.

We are currently maintaining branch of bitcoind with bitcore patches at https://github.com/satoshilabs/bitcoin . I don't want to put that into npm since I can't promise long term commitment (also we would need to rename it etc)

You can also use watch-only functionality (which implies storing the address in Bitcoin Core's wallet file, but not the private key).

authors: Наталия Марицына


text:
What does "P2P peers available. Skipped DNS seeding" means?
I'm trying to avoid bitcoin daemon trying to connect to other addresses but the ones that I set in bitcoin.conf.
I've commented vSeeds in chainparams.cpp and I've cleared vFixedSeeds in this way:

        vFixedSeeds = std::vector<SeedSpec6>(pnSeed6_main, pnSeed6_main + ARRAYLEN(pnSeed6_main));
        vFixedSeeds.clear();

But the daemon still tries to connect with some addresses. What I am missing?
What I need to do is to connect two bitcoin daemons that are running in the same machine, with a different genesis block than the main blockchain (both daemons share the same genesis block).

Bitcoin Core does not solely rely on the DNS seeders to find nodes to connect to. The peer discovery system first starts with a local database of known nodes that it gathers after having had connections. DNS seeding or fall back seed nodes are only used if the peers database is empty, i.e. the first time you run the software. So this message means that the peers database is not empty, so it will skip the DNS seeders and go straight to connecting to peers from the database.

What I need to do is to connect two bitcoin daemons that are running in the same machine, with a different genesis block than the main blockchain (both daemons share the same genesis block).

Use the -connect=<ip>:<port> startup option. This option means that the node will connect only to the specified IP address and port and nothing else; it won't do any other peer discovery.


text:
Pycoin: How to send transaction?
There is a problem in making and sending transaction.
I got UTXOS by using API(GreenAddress), and from utxos I made a transaction. But calculated fee is always larger than one in original GA service.
Sometimes success to send transaction.
Sometimes, receives error like this 'Invalid signature'.
I can't find out reason.
Help me.

Hard to say without looking at the code. Want to paste the relevant code?
When dealing with the GreenAddress api we generally sign using libsecp256k1 rather than pycoin (even when we use pycoin for other things)
For example see https://github.com/greenaddress/garecovery - it makes GA multisig transactions with pycoin and then signs them
Hope it helps!

I appreciated your help. This answer is great helpful to me.

Hi, Lawrence Nahum. I saw the project you teached me. There is also one problem. Sorry. From unspent transactions, How to make transaction and sign it? Pls help me.


text:
Pycoin: How to sign SegWit transaction via Pycoin?
My target is to make transaction with unspent transaction outputs(UTXOS).
The information of UTXOs is as follow.
[
  {
    "pt_idx": 0,
    "subaccount": 37,
    "ga_asset_id": 1,
    "value": "92343",
    "block_height": 1288714,
    "txhash": "9e2d2d56632b609e9b5d0a1990cf0ffbd9865cec558b68ed106df352fd89cfb1",
    "pointer": 1083,
    "script_type": 14
  },
  {
    "pt_idx": 1,
    "subaccount": 37,
    "ga_asset_id": 1,
    "value": "9961066",
    "block_height": 1288718,
    "txhash": "b0e37f463aba4e3abb078eb77c472b29621cfdd17ed83ae41122b0b95df5e518",
    "pointer": 1096,
    "script_type": 14
  },
  {
    "pt_idx": 1,
    "subaccount": 37,
    "ga_asset_id": 1,
    "value": "315595",
    "block_height": 1288721,
    "txhash": "b062efcab010d436ca2f6bed0dc61b90d8cbced756e1ed7cc7593cac30d87326",
    "pointer": 1099,
    "script_type": 14
  },
  {
    "pt_idx": 1,
    "subaccount": 37,
    "ga_asset_id": 1,
    "value": "1872759",
    "block_height": 1288716,
    "txhash": "f88cfdb328f9d298b0ff8a641198d3e63ea7efaf6f98f5692ba3f88a03a73c2b",
    "pointer": 1088,
    "script_type": 14   }
]

From these I made transaction using pycoin library.
By the way, it is difficult to sign a SegWit transaction.
If anyone knows about this, please tell me.

What the pycoin version ?

pycoin 0.80.If you have solution, Pls tell me.

@Mickey102644 Can you paste the (unsigned) transaction you made with Pycoin?

I’m voting to close this question because the user doesn't show any trace of experiment or trial-and-error whatsoever, essentially asking us to write code for them.

For compatible segwit transactions, it is basically using p2sh transactions.
For pycoin specifically, you need to provide p2sh_lookup dict when sign the p2sh transaction.
I have a sample for bitcoin offline/paper transaction if you would like to check, the method spend_sh_fund may suit your need.

What about native segwit? Is there library to sign those?

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


text:
How Bitcoin node discovery work?
When you install Bitcoin client, how does it discover the nodes to get a copy of the blockchain?
Are their seed nodes ? Are they vulnérables? SPOF ?

Welcome to Bitcoin.SE! What is SPOF?

single point of failure

All the seed nodes are independent of each other AFAIK, if DNS is hacked we likely have bigger problems.

There are several hard-coded DNS seeds, which work AFAIK as a DNS round-robin to provide connection to several random nodes.
Once initially connected to nodes, peer discovery is automatic and your node could easily learn about the entire network through just a few connected nodes.
There is a slight chance that a malicious ISP could hijack DNS or for that matter, all Bitcoin traffic, either preventing peer discovery or alternatively providing false or limited results. This has already been asked elsewhere. Provided you are able to connect to just a few well-connected nodes on main-net everything will work as expected.


text:
Buying selling of cryptocurrency. Where does the coin come from and where does it go?
I am a novice trying to understand selling and buying of crypto currency. I could not find it on google so asking, please do not be harsh.
Say, I have an account with coinbase and want to buy bitcoins or other cryptocurrency, how does/where from an exchange gets those coin to sell to me? and If I want to sell my coins whom does the exchange sell it to.
Is there an article on how this trade work on the internet?

A coin exchange is much like a stock exchange: individual traders bring their coins to the exchange to make trades. So are you asking "what are the names of some of these traders" or "how does a new coin get created" or "how does a new exchange attract its first trader" or "how does a basic transaction work (note that you can do transactions without exchanges)" ... It could help to focus your question a bit.

I am a novice trying to understand selling and buying of crypto currency. I could not find it on google so asking, please do not be harsh.

No worries, we all start out here.

Say, I have an account with coinbase and want to buy bitcoins or other cryptocurrency, how does/where from an exchange gets those coin to sell to me?

They already have a good stock of Bitcoins ready to sell you.

and If I want to sell my coins whom does the exchange sell it to.

It is different for some exchanges. Some will buy them directly from you to get stock of them, and others will put them up for other users to buy, and the exchange will act as a middleman.

Is there an article on how this trade work on the internet?

Yes, a simple search should provide you with many resources.
Hope this helped!

The very, very first coins are minted and created through the process of mining. Then it's a series of transactions that move them around.
There are TONS of articles and books out there. You probably want to research a little before asking here.

I am sorry, and you are right .... I just found one. Thank you.


text:
What value does bitcoin add to the world?
I don't understand the value of bitcoin mining other than to produce value for its owners.  What product is produced for the world?  Mining for coal produces coal to be used for energy production.  Mining for precious minerals provides metals for use in products all humanity can use.  What product does bitcoin mining produce?  I originally thought these computations the bitcoin miners were doing were solving some intractable math problem needed for some scientific usage, but as best as I can tell the math is for no other purpose than to generate value for the owner.

If you see bitcoin as a currency, mining is issuing new bitcoins. It is analogous to a central bank issuing (or printing) new currency.

What product is produced for the world? Mining for coal produces coal to be used for energy production. Mining for precious minerals provides metals for use in products all humanity can use.

You could ask the same question to the central bank example. If The Fed issues $ 1 trillion what product is it producing for the world? The difference with bitcoin is that there is no central authority that chooses when to issue new currency but an algorithm and the issued currency instead of going to the banks in a form of loan, are given to the user who mines the next block.

Satoshi Nakamoto in his famous white paper presented a solution to the problem of consensus among decentralized and not trustworthy peers via Proof-of-work.
Bitcoin mining is to secure the network of decentralized and trustless nodes.
Bitcoin mining adds value by providing security to the network.
The primary purpose of Bitcoin mining is not to produce value for its owners. Value is produced just to incentivize nodes to contribute more to Proof-of-work network power.

... but as best as I can tell the math is for no other purpose than to generate value for the owner.

Bitcoin does not have a concept of 'the owner'.
Mining generates value for the user initially, through the confirmation of new transactions in blocks. Without mining, there is no reliable way in Bitcoin for the transaction to be confirmed.
Since the currency is new, mining also serves the dual purpose of issuing new currency.
Since its inception in Bitcoin, mining has been seen as analogues to mining for gold. The miners are free to enter the mine and work (which is confirming transactions) and when they are successful in solving the mathematical puzzle needed to create a valid block they receive the transaction fees (BTC already in circulation) and the block reward (newly minted BTC). As time progresses the block reward is regularly halved, the last new Bitcoins are expected to be issued in approximately the year 2040.
The process of mining is valuable for the user of Bitcoin primarily and the miner is paid for their work.


text:
testnet3 node sync process is very slow
My config file is similar to this:
testnet=1
blocksonly=1
rpcport=5000
server=1
listen=0
prune=1000
dbcache=16000
rpcallowip=0.0.0.0/0
rpcuser=someuser
rpcpassword=somepass

I have started the node sync in testnet mode and I tried to check the status by using the command
$ tail -f testnet3/debug.log

Ouput: 2018-04-08 04:09:51 Potential stale tip detected, will try using extra outbound peer (last tip update: 46620 seconds ago)
2018-04-08 04:20:21 Potential stale tip detected, will try using extra outbound peer (last tip update: 47250 seconds ago)
2018-04-08 04:30:51 Potential stale tip detected, will try using extra outbound peer (last tip update: 47880 seconds ago)
2018-04-08 04:41:21 Potential stale tip detected, will try using extra outbound peer (last tip update: 48510 seconds ago)
2018-04-08 04:51:51 Potential stale tip detected, will try using extra outbound peer (last tip update: 49140 seconds ago)
2018-04-08 05:02:21 Potential stale tip detected, will try using extra outbound peer (last tip update: 49770 seconds ago)
2018-04-08 05:12:51 Potential stale tip detected, will try using extra outbound peer (last tip update: 50400 seconds ago)
2018-04-08 05:23:21 Potential stale tip detected, will try using extra outbound peer (last tip update: 51030 seconds ago)
2018-04-08 05:33:51 Potential stale tip detected, will try using extra outbound peer (last tip update: 51660 seconds ago)
2018-04-08 05:44:21 Potential stale tip detected, will try using extra outbound peer (last tip update: 52290 seconds ago)

...and keep on getting the same
Again I tried this command to see the peers info
$ bitcoin-cli getpeerinfo
output:
[
]

It means there are no peers, so I want to know what is wrong.
The syncing is happening from more than 13 hours, but still headers and blocks are 0 only.
$ bitcoin-cli getblockchaininfo
{
  "chain": "test",
  "blocks": 0,
  "headers": 0,
  "bestblockhash": "000000000xxxxxxxxxx",
  "difficulty": 1,
  "mediantime": 1296688602,
  "verificationprogress": 5.667000646249453e-08,
  "initialblockdownload": true,
  "chainwork": "0000000000000000000000000000000000000000000000000000000100010001",
.......

You aren't connected to the testnet network (as evidenced by having no peers), of course you aren't syncing! Can you post more of your debug.log, preferably parts where it says something about connecting to peers? If you can post all of it, that would be better.

are you running bitcoin testnet3?
put these lines to your conf file, shutdown and restart syncing again
addnode=104.237.131.138
addnode=151.80.205.132
addnode=192.155.82.123
addnode=74.220.255.190
addnode=80.100.203.151

Thanks @amaclin Now syncing is done, but pruning is taking long time.$ bitcoin-cli getblockchaininfo
error code: -28
error message:
Pruning blockstore...

I have never used pruning. Testnet spends ~13 Gb on disk - it is OK for me. AFAIK, you could prune blockchain while downloading it, not after syncing


text:
Bitcoin config file to setup bitcoin node in testnet network in ubuntu
I am new to blockchain, I want to setup my node in testnet network in my ubuntu machine.
I am using this below mentioned bitcoin.conf file. Is this the correct format to sync the node faster?  Or I need to do the changes in this config file.
testnet=1
dnsseed=0
upnp=0
setgenerate=1
blocksonly=1

port=12000
rpcport=5000

server=1
prune=1000

rpcallowip=0.0.0.0/0

rpcuser=someuser
rpcpassword=somepass

I am referring this link to setup my bitcoin node https://www.codeooze.com/blockchain/bitcoind-running-in-docker/

I have started the node sync:

To sync faster I have updated my bitcoin.conf file by adding the node addresses.
My latest config file is similar to this:
testnet=1
regtest=0
dnsseed=0
upnp=0
setgenerate=1
blocksonly=1

server=1

addnode=104.237.131.138
addnode=151.80.205.132
addnode=192.155.82.123
addnode=74.220.255.190
addnode=80.100.203.151

maxconnections=15
minrelaytxfee=0.0001
maxmempool=200
maxreceiverbuffer=2500
maxsendbuffer=500
dbcache=16000

rpcallowip=0.0.0.0/0
rpcuser=someuser
rpcpassword=somepass

remember when using testnet rpc config needs to go under [test] section.

In general, you can use Lopp's Bitcoin Core config file generator to set up your Bitcoin Core config files. Parameters are collected in groups by topic (e.g: Mining, Networking, ...). Moreover, each parameter contains a description of what it is used for and what is it's default value.

Meanwhile...
addnode needs to be in the [test] section for testnet. So it's
[test]
addnode=104.237.131.138
addnode=151.80.205.132
addnode=192.155.82.123
addnode=74.220.255.190
addnode=80.100.203.151

now.

To sync faster your config should be like that:
testnet=1
blocksonly=1
rpcport=5000
server=1
listen=0
prune=1000 # this has no effect during syncing
dbcache=16000 # will take too much memory
rpcallowip=0.0.0.0/0
rpcuser=someuser
rpcpassword=somepass

Thanks @Adam, I will try this.  And I want to know should we use rpcallowip=0.0.0.0/0 or we can remove from the config file because this is 0 only?

If you want to use RPC remotely you should set here your IP range or 0.0.0.0/0 for any IP.


text:
noob - set up a wallet with centos 7
Hi so I used the following bash script to set up bitcoin on my centos server https://gist.github.com/cdodd/f485b72aed8c2a6440a6141cd1ba8273?signup=true
however i don't know how to get a wallet or create a wallet and everytime i try I get the following error, their is no config file and I am not sure where one is meant to be located. could someone please help point me in the right direction to install bitcoin correctly and create my own wallet.
Thanks
./bitcoin-cli -testnet getwalletinfo
error: Could not locate RPC credentials. No authentication cookie could be found, and RPC password is not se
t.  See -rpcpassword and -stdinrpcpass.  Configuration file: (/root/.bitcoin/bitcoin.conf)

Welcome to Bitcoin.SE! I get this error if bitcoind or bitcoin-qt -server are running on mainnet and I try and query using bitcoin-cli -testnet - you have to start the daemon on -testnet first if you wish to use testnet.

check out the bitcoin.conf file and see instructions to create rpc credentials. template is here: https://github.com/bitcoin/bitcoin/blob/master/contrib/debian/examples/bitcoin.conf
specifically, here
# If no rpcpassword is set, rpc cookie auth is sought. The default `-rpccookiefile` name
# is .cookie and found in the `-datadir` being used for bitcoind. This option is typically used
# when the server and client are run as the same user.
#
# If not, you must set rpcuser and rpcpassword to secure the JSON-RPC api. The first
# method(DEPRECATED) is to set this pair for the server and client:
#rpcuser=Ulysseys
#rpcpassword=YourSuperGreatPasswordNumber_DO_NOT_USE_THIS_OR_YOU_WILL_GET_ROBBED_385593
#
# The second method `rpcauth` can be added to server startup argument. It is set at initialization time
# using the output from the script in share/rpcauth/rpcauth.py after providing a username:
#
# ./share/rpcauth/rpcauth.py alice
# String to be appended to bitcoin.conf:
# rpcauth=alice:f7efda5c189b999524f151318c0c86$d5b51b3beffbc02b724e5d095828e0bc8b2456e9ac8757ae3211a5d9b16a22ae
# Your password:
# DONT_USE_THIS_YOU_WILL_GET_ROBBED_8ak1gI25KFTvjovL3gAM967mies3E=
#
# On client-side, you add the normal user/password pair to send commands:
#rpcuser=alice
#rpcpassword=DONT_USE_THIS_YOU_WILL_GET_ROBBED_8ak1gI25KFTvjovL3gAM967mies3E=
#
# You can even add multiple entries of these to the server conf file, and client can use any of them:
# rpcauth=bob:b2dd077cb54591a2f3139e69a897ac$4e71f08d48b4347cf8eff3815c0e25ae2e9a4340474079f55705f40574f4ec99

I don't have CentOS, but running on SuSE Linux, which is quite similiar.
At first, let me say, it is not recommended to run bitcoin daemon with root privileges. You may want to create a user to run bitcoin.
After install with the script, you should have three files (well, symbolic links) in /usr/bin, one is bitcoin-cli, the other we need bitcoind. With the new user you would open a terminal window, and see if you can start the daemon (bitcoind). It would normally create a bitcoin.conf file in the directory ".bitcoin" in the users home directory. In this file you can set the rpcuser and rpcpassword, that you will then use with bitcoin-cli.
If daemon does not start, is there any logfile from the system or in the ~/.bitcoin directory of the user?


text:
how a system based on a blockchain would deal with exponential growth of informations carried in it?
I was reading this article about the difference between a blockchain and centralized servers and a question came up to my mind: if I understand well the difference stands in the fact that in a blockchain there isn't a centralized server that maintains online a version of the informations based on it and protects them from corruption. I'm thinking for instance about wikipedia. Every "miner" instead has a copy of the informations - of the blockchain - and that is why it is so difficoult to alter a blockchain.
But what if these informations, and with them the blockchain itself, became too heavy to be supported by little private servers? My question is how a system based on a blockchain deals with exponential growth of informations.
I hope to ask in the right place, if it isn't I beg your pardon!

Bitcoin's blockchain grows currently at the rate of one block every ten minutes on average, according to consensus parameters. That's not an exponential growth, but a linear one. At present this is well below the growth in storage capacity allowed for by Moore's-law.
If in future the consensus parameters were to change, either to make blocks more frequent or, larger, then the storage requirements are one consideration that would have to be taken in hand.
In 2009 we had the first 2.0 terabyte hard drive, by early 2018 it is expected that a 14TB HDD should be available.[1] The cost per Gigabyte has reduced from nearly $0.12 per GB in 2009 almost down to $0.02 per GB in 2017.[2]
If the cost in whatever terms of running a full node becomes too onerous then we would expect to see more SPV nodes and, SPV nodes connecting to full node servers i.e. Electrum.

"Bitcoin wallets like Electrum have been using SPV successfully for years without any problems, and they save users the hassles of maintaining a full network node."[3]

SPV was discussed in section 8 of the original Bitcoin whitepaper.
rel:
[1] Wikipedia - History of hard disk drives - https://en.wikipedia.org/wiki/History_of_hard_disk_drives
[2] BackBlaze - Hard Drive Cost Per Gigabyte - https://www.backblaze.com/blog/hard-drive-cost-per-gigabyte/
[3] medium.com - Why Every Bitcoin User Should Understand “SPV Security” - https://medium.com/@jonaldfyookball/why-every-bitcoin-user-should-understand-spv-security-520d1d45e0b9


text:
How do I know if an output is unspent when looking through the raw transaction data of a transaction?
When looking through the data represented in JSON, how do I know if a particular output has been spent as input in another transaction?

You don't. To know if an output was spent you must check the blockchain, the information is not encoded in the transaction itself.
In Bitoin, you don't need to scan the entire blockchain, though. There's a database maintained by nodes, wallets and other software called unspent transaction output, or UTXO. Other coins may be different.

Exactly, wouldn't it be great if transaction had "I am valid!" flag, then you wouldn't need to validate anything!

@PieterWuille that is impossible because chained block cannot be modified. The flag "I am valid" will never updated for the output.


text:
Why doesn't the Bitcoin Wallet mobile app require the whole blockchain?
I use the Bitcoin-Core on PC, where it starts by downloading the whole blockchain, before one can use the wallet.
Why doesn't it require to download the blockchain in case of the mobile app?


text:
Why did the Bitminter application ruin my GPU?
I was trying out Bitcoin mining with my home GPU, a Radeon R9 290x, with the Bitminter program, on Windows. (I know it's not profitable, it was just mere curiosity) It instantly recognized my GPU, and when I clicked on start, the whole system crashed, like if I unplugged the power source. Since then, the PC doesn't recognize the GPU at all, like as if it wasn't plugged in, nor does my monitor receive any input. What could have been the problem? Could it be fixed?

Mining itself don't ruin the GPU, but the long usage. A GPU's lifespan is at least 3-5 years. When working continuously on high freq. it is decreased as well.
  Whoop in your case, your card just got 'burned'
It is not a the mining itself that caused the damage, but there is something else, or software, or the GPU was not quite on her place, or maybe some malicious software helped you for the achievement.

It was indeed old, yet it was surprising, since it 'burned out' the instant I started using the software. Is there a way to recover (save) the GPU somehow?

@user41801 You should ask that somewhere where people who know a lot about computer hardware are. My best guess for the reason of the failure is that it was full of dust or the fans weren't working properly or at all. You didn't notice the problem because you didn't use your GPU at full load for some time. Then, when you attempted to do bitcoin mining, your GPU was put to maximum load. It wasn't able to get rid of the emerging heat and failed.


text:
Mini private key with character "l"?
When trying to redeem a btcc chip I noticed a bad encoded mini private key. One of the character is "l". Anyway has seen this before? I guess these keys are also base58 normally?
Thanks

Have you tried the digit 1, the uppercase i, and the lowercase L?

Hi Pieter, I tried I and i (but aren't these excluded as it is base58?).

It's not a 1 neither...

Please remove the link; it contains enough of your private key to make brute-forcing it worthwile.

Solved: it appeared to be an "i" but the private key showed it as "l".

Not too hard to brute-force
static const char* base58 = "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz";
static void mini ( )
{
  char* x = "S6c56bnXQiBjk9mqSY*******NzrRy?";
  QByteArray xx ( x );
  char* n = xx.data ( );

  for ( int i0 ( 0 ); i0 < 58; i0++ ) { n [18] = base58 [i0];
    for ( int i1 ( 0 ); i1 < 58; i1++ ) { n [19] = base58 [i1];
      for ( int i2 ( 0 ); i2 < 58; i2++ ) { n [20] = base58 [i2];
        for ( int i3 ( 0 ); i3 < 58; i3++ ) { n [21] = base58 [i3];
          for ( int i4 ( 0 ); i4 < 58; i4++ ) { n [22] = base58 [i4];
            for ( int i5 ( 0 ); i5 < 58; i5++ ) { n [23] = base58 [i5];
              for ( int i6 ( 0 ); i6 < 58; i6++ ) { n [24] = base58 [i6];
                const MyKey32 sha ( MyKey32::sha256 ( xx ) );
                if ( sha.constData ( ) [0] == 0 )
                {
                  const QByteArray temp ( xx.constData ( ), 30 );
                  const MyKey32 priv ( MyKey32::sha256 ( temp ) );
                  _trace ( QString ( "%1 %2" )
                     .arg ( priv.toStringWif ( false ) )
                     .arg ( priv.getAddressHashClassic ( ).toString ( ) ) );
                }
              }}}}}}}
}

Might be but I'm not a coder and I don't understand your snippet. Anyway, it's just one character that isn't correct and I wonder how in earth this is possible. I will try to brute force manually :-)

authors: Андрей Давыдов


text:
How do I set up my own custom signet?
Configuration: a Windows machine on a local WiFi network.
For classroom purposes I would like to have a custom Signet network so students can get used with Bitcoin Core and Send/Receive.
This is the bitcoin conf file I already created:
signet=1
signetchallenge=512100146aa4936a2dc8d8c26c3429a0c78017f974268d2f51ae

[signet]
rpcport=38332
rpcuser=tester
rpcpassword=tester

I used the Signet wiki page to get me started together with ChatGPT (since I use Windows and the Wiki page demonstrates it in Linux.
I think other nodes should use that same conf file but in my WiFi network they don't see each other. It's the first time I try Signet so probable I'm making some noob errors here.
Setting up an issuer to mine blocks is another difficulty; hope to get some insights on that too.
Thank you!

try plebnet playground
fork the repo and set up your own or simply use the configuration as is.
https://www.plebnet.fun/
https://github.com/PLEBNET-PLAYGROUND/plebnet-playground-docker
https://github.com/PLEBNET-PLAYGROUND/plebnet-playground-docker/blob/master/bitcoin-signet/bitcoin.conf

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


text:
Using Bitcoin Core Regtest in classroom
I'm looking for a way to use Bitcoin Core in Regtest in a WiFi network (educational purposes in classroom).
The goal is that students install Bitcoin Core, activate Regtest, generate coins and send them to each other.
The problem is, in my tests (on two separate laptops), the nodes don't find each other.
When I want to use the console command addnode I assume I have to use an IPv4 address with port number but I can nowhere find the port number that is currently used for each machine.
Also, I don't know what de conf file should contain for this purpose. I hope someone can shed a light on this? Thank you.

This post from 2018 seems to have a .conf example for what you want to do.

Thank you I think it was really useful. In my home network test with 2 laptops, the nodes are "seeing" each other.
These are the config files I used:
'Main PC:
regtest=1
server=1
[regtest]
port=18332
rpcport = 18333
rpcuser=bitcoinrpc
rpcpassword=password
rpcallowip=0.0.0.0/0
Other Nodes:
regtest=1
server=1
[regtest]
#change port number and rpcport for each machine in the network
port=18443
rpcport = 18444
#edit ip-address and port number according to network config
connect=192.168.xx.xx:18332 '
Generated coins are still immature though.

You can use something like bitcoin-cli generate 101 and be able to spend the first coins

Yes, I found out that they become mature after 100 blocks. So it's best to mine 101 blocks directly I guess. When we send tx to each other, I also guess I have to mine a block now and then via generatetoaddress...

It works with following configuration files (on different machines):
Main PC:
regtest=1
server=1

[regtest]
port=18332
rpcport = 18333
rpcuser=bitcoinrpc
rpcpassword=password
rpcallowip=0.0.0.0/0

Other Nodes:
regtest=1
server=1

[regtest]
#edit ip-address and port number according to network config
connect=192.168.xx.xx:18332

This way each PC (node) connects to the main computer (so each student only connects to the teacher's PC.) Each student could post his IP-address with a different Port Number in a Teams/Discord channel and add more nodes to the conf file.
I also tested with addnode=x.x.x.x:18332 for the second PC and that also works.

Cool, I hope your students and you have a blast!

You could consider using a custom signet instead. Other than regtest, it’s not a sandbox environment, but an actual network. I think you should for example not need to change ports for signet. You’d still need a way to get the initial connection to the network, though. A key difference would be that only the signet operator with the signing key can sign new blocks into existence, whereas anyone can generate blocks on regtest, if that is an important point.

Thanks for the input. I could try it but first I have to learn about signet though. After googling I've found: "Why run Signet?
You are an Instructor, and want to run a controlled Bitcoin network environment for teaching purposes." -> Should try in that case. Many thanks!

I think you might have been looking at the same page already, but trying to find instructions on how to set up a custom signet, I found: https://en.bitcoin.it/wiki/Signet#Custom_Signet

Yes, same page but very challenging for me. I'm not good in terminal windows and the example is a Linux one I see.

If you want, you could ask a "How do I set up my own custom signet?" question here on BSE. I was surprised we didn’t have it yet.


text:
Private Blockchain Key Purchase
Please anyone explain as IQOPTION is telling me that I have to purchase a $700 private key to get access to my BTC Blockchian wallet once they wired my Finds in to this wallet?? anyone please have an answer?

Buying a private key doesn't seem right. It means that they know the private key themselves. I have never heard of IQOPTION it feels sketchy...

why would you buy a private key rather than bitcoins?

This almost certainly sounds like a scam, that is not how a wallet works.

The normal way to get started in bitcoin is
1) Choose some free wallet software. Download it to your computer. Use the wallet software to generate a private key (cost so far: zero). Write down your recovery phrase or private key on a piece of paper and store it somewhere safe where no-one else can ever see it.
2) Either

Use traditional money to buy some bitcoins. There are exchanges that offer this service. Do some careful research to find a trustworthy exchange. Alternatively there are bitcoin ATMs which take traditional money and send bitcoins to your wallet's adddress. Make sure that they send your bitcoins to the address of your wallet on your computer, don't accept an online-wallet or cloud wallet run by someone else unless you fully understand the difference. Try this out with a small amount of money first - don't invest money you can't afford to lose completely.
Mine some bitcoins. This is now impractical for anyone new to bitcoin. At least, wait until you really fully understand bitcoin inside and out.

Some tricksters will try to trick people who are new to bitcoin,. They will make promises in return for money. They will give you a useless "watch-only" address saying that it contains your bitcoins, but a watch-only address does not give you ownership. Then they will invent further reasons for you to give them money until they have extracted everything you have or until you realise you have been tricked.
As bitcoin payments cannot be reversed, there is no way to get money back. There is no central bitcoin authority who can help.

Anyone who unexpectedly says you have to pay $700 for a private key is almost certainly a crook.

thanks for the explain, most of BTC traders are asking these. That means they are not legit and possible scammers.

Checking their website, I seems that they are not just another Bitcoin exchange which is trading fiat currency for bitcoins or vice versa, but they seem to engage in highly sophisticated transactions which are similar to highly risky transactions in fiat currency world such short selling BTC.
As mentioned in the comments, if you are just looking for a bitcoin wallet, you have definitely hit the wrong place. And please make sure you understand the concept of private key before you put funds into any kind of crypro wallet. To buy a private key from someone else is as logical as to have the people who sell you a safe fax the combination to you.
About the company IQ Option as such: They seem to be properly registered with the relevant EU regulators. Whatever that means in practical terms.


text:
How does the hash of a coinbase transaction differ for the same miner?
Based on the format of a coinbase transaction described here: What is the format of the coinbase transaction?, I don't see how the all the coinbase transactions for a given miner do not all have the same hash assuming the miner was just using a single pubkey and the block rewards were the same. If they all have the same hash then when you spend one of them, you effectively use them all because that transaction hash has now been used as an input. Clearly that wouldn't make sense, so how are they ensured to be unique transaction hashes?

Closely related, almost duplicate: https://bitcoin.stackexchange.com/questions/30764/why-block-height-is-required-in-coinbase/30780#30780

The script of the input to a coinbase transaction can hold up to 100 bytes of arbitrary data. After BIP 34, the block height must be the first thing in that script. Since each block has a different height, this rule ensures that each coinbase transaction is unique as the block heights will always be different.
Furthermore, since miners can put whatever arbitrary data they want in that input script, they frequently use that as an extra nonce. Instead of reselecting transactions when all of the nonces are exhausted, miners will increment a value known as the extranonce which is put in the input script.

Also, before BIP 34 activated, there were in fact cases of identical coinbase transactions in different blocks. Only the outputs from the most recent of these identical coinbase transactions are spendable. Spending outputs from these transactions does not spend all of the outputs, only the ones from the most recent one. This means that the outputs from the earlier coinbases are unspendable and those coins are provably lost forever.

I see, that makes sense. Just to clarify one thing, block heights are only guaranteed to be different for a coinbase transactions for the same miner because coinbase transactions for different miners could potentially have the same block height in the case of a temporary fork?

Yes, block heights are only different for the same miner.


text:
Altcoin - genesis block - TypeError: __init__() takes exactly 2 arguments (3 given)
I'm trying to use the genesis script from innova to generate a genesis block of Xevan_hash
https://github.com/innovacoin/GenesisH0/blob/master/genesis.py
I'm using these parameters:
python genesis.py -a xevan_hash -z "a news string" -p "myprivate key"
and I always get this error:
Traceback (most recent call last):
  File "genesis.py", line 224, in <module>
    main()
  File "genesis.py", line 15, in main
    tx = create_transaction(input_script, output_script, options)
  File "genesis.py", line 74, in create_transaction
    Bytes("version", 4),
TypeError: __init__() takes exactly 2 arguments (3 given)

Run the following command in your terminal:
pip install construct==2.5.2
Then try to run the python script again.


text:
how Ripple Xcurrent works?
As per my knowledge Xcurrent uses blockchain. But how it uses blockchain ? Xcurrent or Interledger protocol talk about ledger entries, I would like to know, do they really use blockchain as a ledgers in bank transfer or they use banks native ledgers like (databases or anything)? What is difference between general and sub-ledger?, is sub-ledger is referred as bank's native ledger ?

Taking a look at the "How it works" document on their website, the first time they mention the word "Blockchain" is in their "About the company" section in the end of the document. So I would be quite sure that their product has absolutely nothing to do with any kind of blockchain technology.

so it means that they are using pure messaging layer with Xcurrent, nothing else related to blockchain? and they ledgers are databases kinda things??

xCurrent has the same problem that blockchains like bitcoin have. You have parties that don't trust each other and are not willing to trust any single central authority, yet you need them to reliably agree on whether or not a payment took place.


text:
How get outpoint from txIn
I'm from Ukraine and do not know much English, sorry. I'm not understand where in transaction keep outpoint.
Please give me example or manual how get outpoint from input.

The developer pages of bitcoin might be a first step: https://bitcoin.org/en/developer-reference#term-raw-format, and then there is also the wonderful book from Andreas „Mastering Bitcoin“, which is also online available...

Every transaction input consists of a number of fields:

The txid of the transaction whose output is being spent.
The index of the output being spent (also called vout).
The scriptSig, or unlocking script.
The sequence number.
(SegWit inputs only) The scriptWitness.

The first two (txid, vout) are called the outpoint.

Thank you, but how get info of input input?

By looking it up. Find the transaction with that txid, and look at its output number vout.

authors: Временный Аккаунт


text:
Statistics on Multisig Bitcoin Accounts by type of multisig
I am looking for statistics on Bitcoin addresses in use by number of multisig addresses.  Specifically, I would like to know how many accounts exist that use 1 of 1, 1 of 2, 2 of 2, etc.  Is there a place where this information exists?
Ideally, it would be nice if there was a threshold for amount of bitcoin associated with the address that could be set.
I would like to see something like https://www.coindesk.com/year-multisig-so-far or https://medium.com/@alcio/some-stats-about-bitcoin-multisig-915f0787ef2f, except these are rather old and they are measures of transactions and not used addresses.

There is no such data source as far as I'm aware.
Moreover, you'll never be able to get complete stats on this, as a multisig address is not revealed to be multisig until an output is spent. If an address has only inputs, it can be any form of P2SH address (even segwit).
That said, for addresses that have been used to make outgoing transactions, you could use bitcoind and parse the raw blocks to appropriate scripts. It shouldn't be too hard to build.

The site p2sh.info somewhat covers what you are searching for.


text:
How to get Master Private key in electrum wallet
I have a wallet in electrum. I would like to get my wallet master private key. I don't know how to get that. Please, anyone, suggest me steps to get my key
Thanks in Advance

There are a few ways to do this:

If you're on linux or macosx you can do so via the command line:

electrum getmasterprivate

Alternatively run electrum and go to wallet menu > password to remove your password temporarily. Then go to view menu > show console and on the console tab use this command to view your xprv:

wallet.keystore.xprv
Then set a password again via wallet menu > password.
Note that there is another console command wallet.keystore.get_master_private_key('yourpasswordhere') that lets you do the same thing without having to remove the password first but the downside of that is that your password is saved in console history (specifically config file in electrum data directory) and can be scrolled through by pressing the up arrow while on the console tab.

AFAIK, the master private key itself is not revealed. However Electrum will show you the seed words from which the master private key is generated from. To get your seed, you can go to Wallet > Seed and enter your passphrase if you have one. Then a dialog will appear which has your seed words. Note that these seed words are not BIP 39 seed words so they are not compatible with other wallet software.

In the answer of Abdussamad above both commands work fine in Electrum console
>>> getmasterprivate()

>>> wallet.keystore.xprv()


text:
Can't we change the block data instead of a nonce?
In the process of solving a hash puzzle, isn't it possible to change the transaction data instead of changing a nonce?

It's possible, and this does happen (refered to as extraNonce), but this is orders of magnitude more resource intensive to do, as you need at least the left hand side of the merkle tree, rather than just 64 bytes of the header.
In Bitcoin the nonce is only 32 bits, which means every 4.2 Billion hashes you need to either update the timestamp, or modify the transaction tree to create fresh work. For a standard block today, this is more than 22 SHA256 hash invocations, versus less than one for modifying the nonce alone.

There is also ASICBOOST, one of which modifies the block version bytes

Which is part of the header.


text:
What happens when the verification of a manipulated transaction fail?
If a malicious miner changes the amount in a given transaction, the hash value of the block changes. Thus, he has to find the required hash value again in that block. Let's say he successfully found the hash value. But what happens to the verification of the transaction the miner has changed? Suppose that he doesn’t have the private key of the sender, verification of this digital signature will fail at this point. Can the malicious miner still be able to add this block to a new chain or is there any mechanism to detect this failure and prevent him from making a new chain?

If a miner includes an invalid transaction in a block, the block is invalid, regardless of the proof of work.
When other nodes verify the block, they will notice that the transaction is invalid, and consider the entire block invalid.
As a result of this, the miner will not receive the mining reward from that block, since it will not be accepted by the network. Thus, miners try hard to ensure their blocks are valid, or they receive no payment for their efforts.

Nothing prevents a miner from creating a fork which contains invalid blocks. However just because they are in a blockchain does not mean that everyone will accept them. All of the other full nodes on the network (including other miners), will receive the block containing the invalid transaction and reject the entire block as invalid. So that block will not become part of their main chain and neither will any block built on top of it, regardless of how much work it has. So a malicious miner could do that, but the invalid block wouldn't become part of the Bitcoin blockchain and every other full node would just reject it and ignore it.
The miner could continue to mine this invalid blockchain. But if no one uses it, then his coins on that chain are valueless and thus the miner would be losing money to continue to mine it.


text:
How many nodes need to validate a newly created block?
It must be impossible for a newly created block to be propagated and validated by every node in bitcoin network considering offline nodes and the ones with poor Internet connectivity.
How many validations is sufficient for a newly create block to be added as the latest block?

Every node in the Bitcoin network acts independently. When a node hears about a new block, it will perform a series of checks to see if it is valid according to the network's rules.
If the block is valid, the node adds it onto it's local copy of the blockchain, and broadcasts the block to the other nodes its connected to.
If the block isn't valid, the node will reject it, and not broadcast it.
So by following the network's rules, even though each node acts independently, together the network is able to remain in consensus regarding the blockchain history.

First off, it is not impossible.  Bitcoin nodes are not validating thousands of transactions per second.  They are actually processing less than ten per second, which is perfectly reasonable for even slower computers.
Second, not all Bitcoin nodes validate all transactions.  What you are likely referring to are "full nodes", which are basically nodes that validate and relay transactions as they receive them.  The network does not operate on a principal of how many nodes have validated a transaction.  It operates on a principal of how much work nodes have done on top of a block containing a transaction.  This work is not done by full nodes, however, but rather "mining nodes".  These are the nodes that perform the proof-of-work algorithm on top of blocks, which are sets of transactions.  If a mining node finds a nonce for a block that contains a transaction, that transaction is now fully confirmed.  It doesn't matter how many other nodes have seen that transaction.
Of course, when the block is broadcast, other nodes will check the mining node's work to ensure that a block contains only valid transactions (transactions that are properly formed and don't double-spend or create new coins) and an acceptable nonce.  This is a considerably less intense computational effort, and full nodes will perform this check prior to relaying a block.  Since bad blocks aren't relayed, they won't propagate through the network, and miners don't waste their resources attempting to cheat the system.

Thank you for your answer. :)
Let’s say a miner broadcasts a new block to other full nodes in the network. This propagation is either rejected(e.g. invalid nonce or digital signatures) or accepted & relayed. My question is, in the latter case, at what point it’s safe to say that this new block is a part of the true chain. For example, isn’t possible that there are two miners broadcasting their blocks at almost the same time? In this case, how do we decide which one will be included in a block?

First, if you use bitcoin, then you are running a node of some kind.  Nodes decide which blocks are in the chain.  For you, your node decides...and no others matter.  However, there is the case of more than one valid block being broadcast at the same.  This is called a chain fork, and it will be resolved when the next block is broadcast.  Basically, all nodes respect whichever version of the chain has had more work put into it.  Your node will see this and respect the longer chain as well.

From a block propagation-time POV, the longer a new block requires to propagate, the likelier reorgs will occur, as competing branches will take longer to resolve.
So in that sense, I am not sure there is a definitive answer to your question. A block may be added as the latest block by many nodes in the network, yet there is a probability that a competing branch with more POW can overtake it. The probability of a reorganisation decreases over time.
Therefore, in an attempt to answer your (good) question, perhaps it's less about the number of validations, but rather the propagation time which matters. A higher propagation time will cause a validator to require more confirmation to ensure that the block in question will not be reorg'ed out.


text:
How do you know your public key from a private key?
In my understanding, when you create a public-private key pair, first, you create a pair of complementary keys by using cryptographic software. Then you give one key the name public key, and give the other key the name private key.  You keep the private key for yourself and give your public key to everyone else.
Then I was reading Mastering Bitcoin, I found this sentence:

Paper wallets are bitcoin private keys printed on paper. Often the
  paper wallet also includes the corresponding bitcoin address for
  convenience, but this is not necessary because it can be derived from
  the private key.

I don’t understand how it is possible to derive the corresponding bitcoin address(the hash of a public key) from the private key.
If the public key can really be derived from the private key, isn’t the opposite true? I mean, we can choose whichever is the private key when we generate them.

If the public key can really be derived from the private key, isn’t the opposite true?

Nope, thats the wonder of asymmetric key cryptography! You can easily derive the public key from the private key, but going the opposite direction is equivalent to brute-force guessing you way through an impossibly large set of numbers (ie, impossible). So the public key and private key are mathematically related, but this relationship is "one-way", so to speak. This is why you can share your public key with other people, but you should never, ever share the private key!
Once someone has a private key, they can use it to derive the public key and bitcoin address easily. But having a public key gives them no knowledge of the private key, since the math doesn't work the same both ways.
In bitcoin, the public key is derived using the Elliptic Curve Digital Signature Algorithm (ECDSA).

Then you give one key the name public key, and give the other key the name private key
...
I mean, we can choose whichever is the private key when we generate them.

I think this is where your misunderstanding comes from, the distinction of 'public' or 'private' is not arbitrarily chosen. One is derived from the other, their relationship is mathematically defined.

In my understanding, when you create a public-private key pair, first, you create a pair of complementary keys by using cryptographic software. Then you give one key the name public key, and give the other key the name private key.

This is the case with RSA but not with ECDSA. In RSA both keys are integer pairs and are interchangeable, i.e you can encrypt with one and decrypt with the other. In ECDSA the private key is an integer and the public key is a point on a curve (2 coordinates) derived from the private key. In ECDSA you can only sign with the private key and verify with the public key not the other way around.

Then my question about the RSA is how it is almost impossible to guess the private key from the public key when it’s randomly chosen. Would you elaborate?

@sflow it goes like this: pick two prime numbers p, q. pick another number e that is coprime with (p-1)(q-1). Calculate d. Then you have two keys (d, pq) and (e, pq). You label one of them private and the other public. Then you throw away p and q. If you have p, q and e you can recreate both keys. But from the one key you cant get to the other (unless you can find the prime factors of p*q)

Be aware that in most RSA implementations e is NOT picked to be difficult to guess, furthermore most private key formats store more than (d,pq). So while you could theoretically build a RSA cryptosystem where public and private keys are interchangable it's not the done thing.


text:
Connecting ElectrumX to external Bitcoin Core node
I have a (full) Bitcoin Core node on a Raspberry Pi (Umbrel) and I'm looking for a way to connect an ElectrumX install to it. Is this possible?

OK, I found it I think. You can type it in the electrumx.conf file.

Hi Bart DV, could you please elaborate what you needed to do so other users finding your question will get the full answer here?


text:
Lightning payments: peer versus channel (LND)
I understand that in order to be able to send a LN invoice my node should be connect to at least 1 channel.
Should both nodes have an equal "stake" in the channel?
Is it correct that it isn't necessary that this channel is directly linked (without relay nodes) to receiver's node?
Do I have to connect with the receiver via "connect to peer"? (I think it's not necessary).
Thank you.

To be more precise in order to be able to pay on the lightning network you need to have at least one channel with another node.
This other node does not have to have a direct channel with the person you are about to pay.
A mandatory condition for you to pay a node is that there is a path consisting of payment channels from your node to the recipient. That path must not be longer than 20 hops. In practice it will be much shorter.
However having such a path is not sufficient. Every node on the path needs to have enough liquidity in their channel to forward the payment. This condition is not possible for you to proof before selecting the path (and a reason why in practise when routing payments several paths will be tested or a payment might fail anyway)
In particular you don't need to be connected to the recipient. Only thing that currently has to happen is that you need to get an invoice from the recipient but also that could come to you over an arbitrary medium of communication including pen and paper.


text:
Unable to find Lightning Node
I have successfully installed and synced my lightning node (Raspiblitz). I see my public ip on port 8333 has 8 conns.
However, when I check my node on 1ml.com my node is not found.
I did forward port 8333 and 9735 on my router.
Should I connect to a peer or create a channel before my node is visible for the outside?

You need to have a channel. Otherwise there won't be any node announce messages with the gossip protocol. Lightning network explorers can't see you without a node announcement message.
The fact that you need a channel to announce your node is a measure to fight SPAM in the gossip protocol. It is described in BOLT 07. Even if you have a channel it takes some time until your node announcement has propagated through the lightning network and being processed by 1ml. So bring some patience

Ah ok, makes sense. Thanks for the heads-up. First steps in Lightning here :)

Hey glad you are here keep asking questions and learning. Lightning network is an amazing technology (:


text:
How exchanges manage funds and addresses
I have heard many exchange works like, Holds all their users funds into the exchange main wallet not directly to their user's wallet. These exchange just provide a deposit address to their users for depositing BTC or ETH and their users are never given private keys. So when a deposit is done under any user's address, Its actually transferred into the exchange main wallet at the same time or at the time of selling coin? Selling coins to exchange does not cost any fee for miners?
I want to learn more regarding this matter, Can anyone redirect me to any link that can explain this in easy words and easy way to setup such wallet?

There is no "user's wallet" when you are using an exchange. What you might think is a "user's wallet" is actually the exchanges wallet. When you deposit any cryptocurrency into an exchange, you are not depositing to "your exchange address", you are depositing to an address owned by the exchange (thus part of the exchange's wallet) and the exchange promises to give you the same amount of cryptocurrency that you deposited to that address if you want to withdraw from the exchange.
When you buy or sell on the exchange, no actual transactions happen; they just update some entries in a database. No money is transferred anywhere; it is all held by the exchange in their wallet.

very nice explanation, So in this case when exchanges generates ETH or BTC address for their customers then is there any private key for our address? Or they are just fake addresses for each user? or how do they do that? And how we can do same for our website?

There are private keys for those addresses; they are controlled by the exchange. Those private keys are part of the exchanges wallet. Keep in mind that a wallet is not necessarily the same thing as an individual address; a wallet is a collection of one or more addresses.

So like bitcoin wallet there could be more than one addresses in one wallet. Does all these addresses in one wallet shares same private key? Is same thing possible  with ethereum too?

Yes, there are more than one address in an exchanges wallet. All addresses have different private keys.

This does not answer "how they manage fund and addresses". This explains general perspective of "not your keys not your wallet". A post that explains surface of "how it might be managed": https://medium.com/@chain.info1/analysis-of-mainstream-exchange-wallet-structure-e4d7e5600633


text:
How to most efficiently keep in sync blockchain on offline computer (including through bitcoin-qt upgrades)?
I have bitcoin-qt running on online computer. I want to:

copy blockchain to offline computer (preferably using WORM media for security reasons)
from time to time update offline copy with newest blocks with smallest effort. Smallest effort means - among others - that I don't want to re-record whole blockchain from online computer to media every time and would prefer incremental copy instead.

The main obstacle that I encountered until now was that - sometimes - when I updated bitcoin-qt on online computer, the 'blocks' directory was wiped out. Then whole blockchain has been re-downloaded, preventing me from copying new blocks incrementally (because for some reason new blk*.dat files had different size/content then previous).

There are wallets that explicitly support cold wallets (example) - maybe looking at how those work would help?

@RedGrittyBrick the idea is to allow for verification of transaction history on offline computer, so cold wallet support is not enough.

Ah OK. Interesting project.


text:
Privatekey Recovery
so the question is about btc privatekey recovery .
Is there any way to recover/re calculate privatekey using these details :
SHA-256
RipeMD-160
public key
public address
rsz signatures ( non-identical R )
scriptsig asm & hex ...

No, there is no way to recover a private key using only the data generated from it. If there were, Bitcoin and other cryptocurrencies would instantly collapse.
If you have a seed phrase (AKA wallet recovery phrase), you can re-generate the private key from that phrase.

Related:

Are there Bitcoin password crackers I can use to recover forgotten passwords?

is there anyother option for us to know the type of that passphrase i.e : length: 12 alphanumeric etc ...
or can we get passphrase using those details ?

@Dion, No you cannot calculate the passphrase or anything about it from the details you mentioned. The best you can do is make guesses based on the sorts of passphrases or passwords used by the person who created it. You can often find software to assist in trying guesses but it may take months or years with minimal prospect of success. As you know, a passphrase is a completely different thing from a private-key and serves a different purpose.

can you give me the links of that softwares which can helps me in guessing the passphrase .

@Dion: https://bitcoin.stackexchange.com/q/3313/13866

You can "recover" it with your seed if you have one, otherwise you need to brute-force your private key from one of your public keys which is nearly impossible.

what if I don't have the passphrase/seed?


text:
Wallet.dat Bitcoin core Privatekey Recovery
Is there any method from which we can manually calculate wallet privatekey from a protected bitcoin core wallet.dat file ?
I was searching on it and find this , I think it is related to my topic https://bitcointalk.org/index.php?topic=4413938.0

Is there any method from which we can manually calculate wallet privatekey ...

You can't calculate the private-key.
You can extract the key if the wallet is unprotected or if the wallet is protected and you know the wallet passphrase (also known as the wallet "password").
You can do this using  walletpassphrase and dumpprivkey in either Bitcoin-core's debug console or using its API.
You can also do this using the equivalent methods in other tools such as pywallet.

... from a protected bitcoin core wallet.dat file?

Only if you know the passphrase for the protected wallet. Bitcoin core uses the password to encrypt the private key.
If you don't know the passphrase, you can't extract the private key.

Related:

How can I export the private key for an address from the satoshi client?
How do I export my private keys from my Bitcoin-Qt client?
How can I export all my private keys using bitcoind?


text:
Is there any way to recover a bitcoin private key using some parts of the key ?
I have a bitcoin wallets private key , but it's incomplete like you can say it's 70% of the private key , there is some alphanumeric missing for the middle of the key , is there anyway to recover it using that 70% of it ?

What format is the private key in? Please don't share any part of the actual key, just describe the format of the backup/file you do have some part of.

I wrote that on a paper  I have privatekey in WIF format starting with 5.

It's a power of 58 possibilities for each character missing (assuming you know the address you are looking for) . So for 4 (58^4) it should be feasible to brute force but for 10 probably not.

Depends a lot on exactly what is missing". WIF encoded private keys are a version byte, 32 bytes of data for the private key, and 4 bytes of checksum data. Losing the last few characters is trivially recoverable, losing a couple of characters in the middle is potentially recoverable, losing a substantial portion of the middle of key becomes increasingly more difficult. Work out how many characters exactly you've lost.

I think I've lost something about 21 characters from the middle . is it recoverable ?

Don’t discard it, but unlikely.

@chytrik can you recover it ?

@DionWinbush if you are missing 20+ characters from the middle of the key, as others said it may well be outside the range of brute-forcing. Nonetheless I would keep the information you have: if it is a significant sum, perhaps it is worth trying anyways.

It depends on how much information you are missing.
A Wallet Import Format key is base58 encoded. Thus, each character in the key can be one of 58 characters.
You mention in the comments that you are missing 21 characters. Assuming you know exactly which 21 characters are missing (i.e., you know that the first 21 are missing), you have 21^58, or 4.88336... × 10^76 possibilities. This is outside the range of bruteforcing.
Moreover, if you don't know which 21 characters are missing, you have many, many more possibilities, as you not only need to iterate all 58 possibilities for each characters, but also try all their possible locations within the key.
Unless you are able to find more information, the key cannot be recovered.

can you give me your email or whatsapp number so I can tell you everything briefly .

it's 58^21 not 21^58

Have you seen the movie "The Imitation Game" ? this reminds me of it because:
if you do have part of it, it 'easier' to get the full message (key) in this case... but exactly by how much?... is it even worth it?
in your case not worth it tho, sorry...
possible? yes,
easier? yes,
but still not worth it by today's computational standards
Anyways, good luck! and don't throw away anything, you never know....


text:
testnet3 - unable to post txn using blockr or webbtc but can do using blockcypher. Also, transactions not getting confirmed. Why?
Tried to use blockr's Api to push transaction - using both online and shell tool - but I get this error:
There was an error pushing your transaction to network!

Did you sign your transaction? Is this double spend? Have you already sent this transaction?

Using webbtc relay api curl http://test.webbtc.com/relay_tx.json -X POST -d "wait=10&tx=RAWTXN" also gives me error:
{
  "error": "Request took too long."
}

However I am able to successfully push transactions using Blockcypher's API.
But here, my transactions have stayed unconfirmed for over 12 hours now :(
Even when I have left a decently large miner fee as seen here.
Worse, I can't find these unconfirmed transactions on blockr. you can find two transactions made to this address: mrZn18QS3Q4LWiyAHt2HtVkJvkEooqXn6G. They can be seen on blockcypher but not on blockr.
Can anyone help me understand what's going on? I thought I should be able to see published transactions, even if unconfirmed from any explorer that explores bitcoin testnet3?
TIA.

Is this the same problem as http://bitcoin.stackexchange.com/questions/51425/bitcoin-testnet3-unable-to-push-publish-raw-transaction-how-to-verify-validity ?

@NickODell no - in that issue, i was unable to publish a raw txn - found the solution and posted it there. Here, I am able to publish txn in one website but not the other two. Also, after publishing, the txns are not getting confirmed.

Most likely you are adding a very low fee. It happened to me some time ago, blockchyper accepts transactions with lower fees than the minimum relaying fee, so the tx will not be relayed by other nodes and therefore, not be included in a block. Try to increase the fees and send it again.


text:
Testnet for bitcoin - are there multiple operating?
I have been tinkering around on testnet with three portals:

Biteasy
Block Explorer
blockr

I observed that when I posted testnet coins using tpfaucet to a wallet created using testnetwallet, the transaction showed up in blockr and blockexplorer but not in biteasy. When I sent testnet coins using the same testnetwallet to a paper wallet address, the txn and balance showed up correctly in blockexplorer but not in biteasy or blockr.
I am a bit confused about what is happening here - I thought these are all services to look up the same testnet and hence I should be able to confirm same blocks, txns, addresses one each of these. Is that not the case? Are there private testnets operating on these portals? I can't see any information saying so anywhere.
Another observation: Blockexplorer is showing the transaction as confirmed with 74 confirmations and balance showing up correctly as confirmed balance in recipient account. But testnetwallet (sender account) is showing the txn amount under "unconfirmed" balance while the txn itself is showing up in history. Confirmed balance is unchanged at the moment in sender wallet. Blockr is not showing the transaction or the amount under the recipient address.
Day 2: testnetwallet.com now shows correct confirmed balance as the sender wallet. I can see the transaction, block and both receiver and sender accounts correctly using blocktrail.com and blockexplorer.com. Blockr and Biteasy still don't show anything - even when I search by block number. Will keep digging.
Day 3: today blockr is also showing the txn, block number and correct balances in both sender and receiver accounts. Until today, blockr wasn't showing any of these. Perhaps blockr service was slow/down? not sure. Biteasy is still not showing anything. I checked blockcypher also today and it's showing everything as well. I am going to use blockcypher's API to post a txn and check all five services to see which one is giving me results and by when. Will edit back with results.

There is no such thing as a private testnet, you can obviously create one, but then it won't be of much use to provide data regarding a private blockchain to the public.
The testing network (testnet3 presently) is the same for every user/developer.
BitEasy's block explorer for the testnet doesn't seem to be working. They don't have data even for dates a month prior to the date you asked this question.
As far as exploring the blockchain the data is concerned, you can do it yourself by accessing the block-chain on your machine after running the testnet bitcoind. The approach may be vary, but then the point being you can do it yourself if you know basic programming.


text:
nTime rolling is just an optimization for large/fast pools, correct?
Need to confirm my understanding of nTime rolling...
It's used to give the miner more options to mine without needing to request more work from the pool, by incrementing the timestamp. However, given a sufficiently small pool, where the nonce space isn't even covered for any given block, nTime rolling has no significant advantage. You can scale the miners nonce range so that each miner is efficiently using bandwidth and time. And Because you're not covering the entire nonce space anyway, the scaling of a miners nonce range is all that is necessary to optimize efficiency.
As a follow-up, I guess it's perfectly possible that the entire nonce space produces zero valid nonces, and therefore you must increment the timestamp to ensure you have a chance, but just as before - for sufficiently small pools this doesn't come into play.
Is this understanding correct?

Is this understanding correct?

Basically, but you've failed to account for the small size of the header nonce space (32 bits) and the speed of modern hardware (on the order of 10 terrahashes per second per miner).
A 32 bit nonce can only provide 2 ** 32 = ~4 billion combinations.  That corresponds to 4 gigahashes.  A single modern miner can do more than a thousand times in half a second, so the nonce space is almost always exhausted without finding a block.
When Bitcoin hash rate was first increasing through the FPGA and early ASIC eras, nTime rolling was implemented so that miners didn't have to make significant changes to their hardware and software to deal with the problem of nonce space exhaustion.  However, that hack of a solution was increasingly less useful the faster hardware got, as a typical block can only move time around in a range of about two hours (3,600 one-second increments) and sometimes much less than that (this is especially the case when other miners are using nRollTime as they can use up the acceptable time values available to subsequent miners).
The correct solution was to put an extra nonce in the coinbase field of the generation transaction[1], something that was actually implemented in the original Bitcoin 0.1 software.  Changing any transaction in the block also changes the 256-bit merkle root in the block header, eliminating the risk of nonce space exhaustion.  This technique is now universally used by Bitcoin miners and usually implemented directly in the hardware (I think usually using a small FPGA for the extra nonce updates and merkle root regeneration).
[1] The coinbase field currently allows miners to add up to 96 arbitrary bytes without affecting any protocol features.  The company Coinbase is named after this field but has no other relationship to it.

Excellent answer. Extra props for the additional info about the proper coinbase field solution.
FWIW, the hashing algorithm I'm mainly focused on is cryptonight, which contains these same concepts, but per my understanding the potential hashing rate of modern hardware is slightly lower. I know the nTime rolling feature is already implemented for CN mining pools, but it's not quite as critical as for ASIC mine-able coins. Theory applies to both though. Thanks!


text:
Deeper understating of blockchain forks.
Ive spend the last 8 months digesting everything and I have a lot more to learn. Is it possible to use Dogecoin on Litecoin network without converting  through an exchange? I assumed  you could since their both  Scrypt and one is a fork.
Also,  I’d like to go learn more.  I’ve done G code programming for CNC machines but that’s it .  So much info out there,  What would you recommend for learning the basics.
Thanks

The second question is too vague.

Short answer is no.
Forks
A fork can mean that you "forked" the code on a repository, meaning you copied it and modified it for your own use case. It can also mean that the blockchain network itself "forked" when it split the blockchain and the network adopted two different chains and usually code and rules as well.

Is it possible to use Dogecoin on Litecoin network without converting through an exchange?

Because two different blockchain networks have 2 different blockchains, they have different sources of truth.  One transaction on the forked chain isn't necessarily considered valid on the other (especially if they happened after the fork) because they are reaching consensus on separate blockchains.  See this related question: Can I do a replay attack to spend my testnet bitcoin on the mainnet?

No it's not possible.  Here's why.
First of all let's talk about forks.  Like JBaczuk stated, a fork is simply when you copy the code and alter some information.  So when people say Dogecoin and Litecoin are forked from Bitcoin, they're saying that they have similar code and that some of the parameters have changed.  So even though they are similar, they are different.
Now let's talk about how a blockchain is created.  Miners submit a block in accordance to a set of rules.  An example of a rule is, like you said, the mining algorithm.  Other examples are blocksize limits and blocktimes.  For example, Litecoin's blocktime strives for 2.5 minutes while Dogecoin's is 1 minute.
What happens next is this block gets sent out to the network in order to be "validated."  This means that full nodes that download the whole blockchain choose to accept or reject this block.  Their criteria?  The protocol rules of the network.  So let's say a miner decides to submit a block that has a 1 minute blocktime (Dogecoin) to a 2.5 minute blocktime network (Litecoin).  Even though they share the same mining algo and have similar characteristics, the full nodes in the Litecoin network will reject the 1 minute block and refuse to download it.  Instead, they will wait for a block that fits ALL of the criteria (protocol rules).