Author

Topic: Create a block first offline and submit it to be the winner - possible? (Read 606 times)

legendary
Activity: 2394
Merit: 6581
be constructive or S.T.F.U
There is no way to get a "head start", since you can only start mining once the previous block has been solved, since its hash serves as an input for the next block.

well you can actually get a head start, by starting to mine  the next block before announcing the hash for the for the current block"if you found it of curse". in theory this is possible, in real life it's not, because if you hold on for a split second , someone else might broadcast the solution before you do. so it makes no sense, it makes every sense to mine an empty block rather than trying to get a head start when everybody else is only a few steps behind.

With today's difficulty, is there a website or something where I can see how long it will take to get the hash function output that is valid?  Will it take > 10 minutes on most personal computers?

the average laptop nowadays will need "46,745,721 YEARS" to solve a block " luck not included"

you can use > http://solochance.com/ to find out the time you need to solve a block based on how many trials 'hashes' you make per second.
full member
Activity: 538
Merit: 175
The merkle root does not become larger when you add more transactions to the block. It is basically a checksum of the transactions. The reason you want to include lots of transactions in a block is to collect some extra transaction fees on top of the block reward, but this is not necessary, and you can find some empty blocks in the blockchain.

You don't need to include transactions in your block, but mining an empty block is no easier than mining a full one.

Per earlier responses I understood that generally miners execute second type of logic so head-start wont matter.

There is no way to get a "head start", since you can only start mining once the previous block has been solved, since its hash serves as an input for the next block.

With today's difficulty, is there a website or something where I can see how long it will take to get the hash function output that is valid?  Will it take > 10 minutes on most personal computers?

According to the bitcoin wiki, a Core i7 3930k can do around 67 MH/s (million hashes per second). At the current difficulty, CryptoCompare shows that you would earn approximately 0,00000105 btc by mining with 67 MH/s for a year.

At today's difficulty, it would take an average of more than 32.600 years to solve one block with a Core i7 3930k, since the block reward is currently 12,5 btc. But the difficulty will rise much faster than your chance of ever solving a block with a CPU.
newbie
Activity: 4
Merit: 3
I thought I understood - but need clarification.  The response earlier suggested that the difficult hash function has nothing to do with the transactions in the block - so is that a common misunderstanding?  I have browsed several explanations e.g. https://medium.freecodecamp.org/how-bitcoin-mining-really-works-38563ec38c87.  Here is says that block header is:

The version of software the Bitcoin client is running
The timestamp of the block
The root of its containing transactions' merkle tree
The hash of the block before it
A nonce
The target

In my illustration when I was saying "current transactions" I was referring to the merkle tree as well.  So this is saying the same thing that the input is basically current transactions in my block (merkle tree) and hash of  previous etc + nonce.

So apologize for repeating the question that if I start my effort early, why would it not give me a head start?  Isnt the rough logic of a miner

Code:
while ( accumBlockSize < myMaxBlockSize && maxTimeIwantHasNotPassed )
{
    takeTransctionFromPoolAndAdd
    accumBlockSize += sizeOfNewTransaction
}

// Now I have enough lets hope I can create a good Header
for ( ;; )
{
    myHash = getHash ( all inputs, merkelRoot (transactions), nonce )
    if ( myHash is valid per rules )
        break;
    nonce++
}

// If I am here I have a valid block
broadCastAndPrayItIsAccepted();

vs

Code:
fork ( sinceBlockHeaderHasNothingToDoWithTransactionsCreateNewBlockHeader)

while ( .... )
{
    accumate Transactions
    waitFotThreadToCompleteAsync
    {
        if I completed - dont care how many transactions- just broadcast
    }
}

Per earlier responses I understood that generally miners execute second type of logic so head-start wont matter.  On my laptop with 0 transactions it will take 10+ minutes to get the hash output so no point even playing the game.

But per lots of posts it seems to be the former hence re-ask.

With today's difficulty, is there a website or something where I can see how long it will take to get the hash function output that is valid?  Will it take > 10 minutes on most personal computers?

Thanks again and no flames please!
newbie
Activity: 4
Merit: 3
Actually makes perfect sense.  Thanks

The analogy of "followup question" clarifies it.
legendary
Activity: 2394
Merit: 6581
be constructive or S.T.F.U
1. hash of previous block which I get only once previous block is broadcast.  I assume that was by someone else

it's not a hash of previous block, it's more like a record-book for all previous blocks,this is what block height refers to, the number's of previous blocks that are"included in it" which were mined in the past.

2. Some representation of 1500 transactions

this is false, the protocol does not force any min number of transactions in the block, the one who solves the block "chooses" what and how many transactions to include in their block, they can simply boradcast it with 0 transactions ( in fact it's more like 1 transaction if you count the actual reward transaction by the coinbase to the miner), the 1500 transactions is nothing but an average. the last block at the time of posting this had a bit over 2800 transactions.

3. A new hash made up by #1 and #2 which is expensive to get.

the new hash has nothing to do with any of this, it's a whole different new round based on the current difficulty.

Now the question is that majority of the miners should somehow reject my block - and that is what I am trying to determine - what is the algorithm that tells them to not accept this block.

ok the easiest way to think of mining is this , you go to a test with many different people, every 10 mins the examiner asks a question, the first to answer it, raises their hand and says the answer.

prior to the exam, every question has a reward box with a locker, everyone was given a key that can be reshaped to represent their answer, once somebody"  thinks" they have the answer, they will shape their key, go to box, try to unlock the locker, if it's unlocked, he shouts in the exam room and say i found the answer, they confirm that his key opened the locker , and agree to give him the reward.

now assuming the first question was 1+1 = 2

everyone now knows the answer, you knowing it before them, makes no difference to anybody as  the next question can be, what is the population of china main land excluding everyone from age 1 to 30 and 35 to 100 and those who have a white pair of shows?

the person who answered the 1+1 = 2 has no advantage over the other candidates just because he knew 1+1 =2.

the only advantage anyone has is the number of answers they can give compared to others which is [HASHRATE] , of course luck plays a role in this, someone might give a million answer in a minute and still fail while a lucky miner says 345345 people and turns to be the correct answer. but chances are those with more trials will beat out those with less.

the examiner/teacher  wants to maintain a 10 minute window for every question, so after every 2016 questions, the examiner takes the average time it took you all to answer the questions, if it's less than 10 mins, he increases the difficulty of the questions to slow you down, if it's more than 10 mins he gives you easier questions.

as stupid as  my example sounds , this is an overall idea of how mining works, if you at least understand the this exam "story" then you should understand that your theory won't apply.
newbie
Activity: 4
Merit: 3
Appreciate your time; and I assume that I am misunderstaning something so I want to see how the prtocol defends against it.  What I undersatnd is that a block is approximately as follows:

1. hash of previous block which I get only once previous block is broadcast.  I assume that was by someone else
2. Some representation of 1500 transactions
3. A new hash made up by #1 and #2 which is expensive to get.

So first mistake I probably made is that I underestimated the difficulty of #3.  Maybe for simple hardware it is in order of hours - so lets change the problem statement a bit - I get specialized hardware; now I just want to win against other specialized hardware to recoup the cost.

If my understanding that new block is made of #1, #2, and #3 - then

If #2 becomes true roughly 5 minutes after last block (3 trx/second 1500 trx/block) then if I get that 5 minute headstart (because I have not pushed those 1500 transactions yet).  So at some time later I compute #3.  Now I have a full valid block that I am ready to broadcast.

Now I first broadcast the 1500 transactions - that should not take much time.
And immediately follow up with the broadcast of my block that includes those 1500 transactions.

Now the question is that majority of the miners should somehow reject my block - and that is what I am trying to determine - what is the algorithm that tells them to not accept this block.
legendary
Activity: 2394
Merit: 6581
be constructive or S.T.F.U
you differently can create a block with your own transactions, you can even create an empty block if you want, this is not the challange that you the blockcoin puts you to, the change is to solve the block before anybody else does , you are confusing yourself a little here.

your theory will work perfectly provided that you keep your initial block secret aka " don't broadcast it" , as long as your node is going to broadcast the block you still have to undergo the Pow computation against everybody else.

Using my sub-par hardware I still manage to generate the key for the block.  Roughly 1500 are needed to make a block.  So approximately at present rate a minder starts working on the hash about 300 seconds after completion of previous block.  I will start immediately after so I will get several second head-start.  Will I not win and with valid transactions?

this is not how  it works, you do not get any head start, the "new block" has a whole different new problem to solve, just because you mined the previous block it does not mean you get any head start, knowing the hash of the last block gives you 0 advantage towards the next block.

So as soon as a block is added, I take that key and construct a block myself first as it should

what key are you going to construct ? !  you need to hash your way to the block solution , and in order to do this you need to be faster than the rest.



the TL;DR version is this

The nonce difficulty to "you" will always be the same regardless of what is in the block, be it your own transactions, mine , anybody else's or not with not a single transaction.

your theory is no different from the perpetual motion , if one works , the other will  Grin



No you will not.

If it was that easy to game the system it would be completely broken and useless right now from all the people like you doing scummy things to try and cheat the system

take it easy,he has a valid question, i have thought about this before, nothing is wrong with exploring the possibilities, when mining first started we had no mining pools, now they are completely fine . it's good that people explore and question things, it opens doors to improvements,  i wouldn't call this a scam or a cheat.
full member
Activity: 294
Merit: 129
No you will not.

If it was that easy to game the system it would be completely broken and useless right now from all the people like you doing scummy things to try and cheat the system
newbie
Activity: 4
Merit: 3
Lets say I create two addresses and transfer between them - there is nothing wrong with this transaction right?  eventually there is no reason for the ledger to consider it invalid.

Both addresses are mine so I am sure that there is no transaction that will appear in the ledger while I am doing this.

So as soon as a block is added, I take that key and construct a block myself first as it should.  Then I push my transactions first (which are enough to make a full block - I know that already) and immediately declare that I have a block as well.

Currently the average is < 5 transactions per second.  

Using my sub-par hardware I still manage to generate the key for the block.  Roughly 1500 are needed to make a block.  So approximately at present rate a miner starts working on the hash about 300 seconds after completion of previous block.  I will start immediately after so I will get several second head-start.  Will I not win and with valid transactions?
Jump to: