# Introducing BOB

bob.fun

Blockchain-on-Blockchain (BOB)

Bitcoin’s consensus with Doge’s utility.

Blockchain-on-Blockchain (BOB) is the first L2 proof-of-work blockchain built on top of the Internet Computer Protocol.

## How does BOB work?

BOB is a proof-of-work chain with similar initial parameters as Bitcoin:

• Coinbase rewards: 600 BOB per block
• BOB total supply: 21 million
• Halving: Every 17,500 blocks
• Target block speed: 1block/ 2 minutes
• No pre-allocation

## How do you mine BOB?

• Visit bob.fun
• Spin up a node through the node interface
• For every block, the mother node sends out a challenge to all miners
• Every miner can compute up to 4’000’000 hashes per round
• Whenever a miner solves the challenge, it earns the block rewards

## Mining details

• The target time to mine a block is 30 seconds, and the challenge’s difficulty is adjusted to reflect it.
• The difficulty represents the length of the pre-determined (0xb0) bytes repetition in 0xb0b0b0……, this for instance would represent a difficulty of 3.
• There’s no limit on the number of miners.
• A new challenge is generated as follows:

new_challgenge = hash(previous + random_bytes)

• A challenge is solved whenever a miner finds a hash(challenge + salt) starting with 0xb0b0b0… according to the current difficulty.

## Costs and speed

• On ICP, \$1 buys 1T cycle (fuel for the program).
• A miner’s program uses 50T cycles per day at full speed.
• Miners choose their speed, affecting the number of hashes computed, hence the probability of solving the challenge.
• If a miner’s program runs out of cycles, it stops until refueled.

## Getting started

1. Go to bob.fun and pay 1 ICP, converted in cycles for your miner.
2. Let the node mine blocks for you.
15 Likes

Post the repo, rugger ser

1 Like

Interesting. I launched a couple of canisters.

Swallowed 2 seperate 1 ICP deposits & no miners have spawned. No transaction history/ anything in wallet in order to check status/ see if my ICP reappears.

What should I do next?

2 Likes

According to the telegram there’s a multi-hour long backlog for spawning new miners. New ones we spawned should appear in a while i guess.

1 Like

Understood, thanks. Will join the telegram.

Cant make new miners and the LP on icpswap is broken. Very sad

I still don’t understand why there is a queue for miner creation? What is limiting it?

Hello I can’t login into the website what am I doing wrong . Any help would be appreciated

Does anyone know if there is an issue with subnet bkfrj-6k62g-dycql-7h53p-atvkj-zg4to-gaogh-netha-ptybj-ntsgw-rqe, I’m having a super hard time getting update calls to return. Ingress Expiry errors all over the place.

3 Likes

We are facing similar problems in the European Subnet, it seems there are individual peaks where the subnet is overloaded.

Only 1.8 KB could be read:

Tagging @SvenF because I see a post about subnets recently…apologies if you are not the right person. I’ve had auotf-hqaaa-aaaas-aem7q-cai trying to stop all night long. I’m guessing it is because I have a 5-minute recurring timer? And one is not finishing before the next? I’m guessing I’m bricked until the subnet frees up enough to let all the timers finish? Perhaps they stack infinitely?

I’m going to try to get a new canister ID on this subnet and redeploy with a different timer structure…is there any way to see how many open call contexts there are from the back end?

There are now 10k+ miners competing for compute resources, so your canister may have to wait a while until it gets scheduled, which can lead to things timing out. Have you tried setting a small compute allocation for your canister, and then trying to stop?

2 Likes

So, what does this all mean? It seems that Bob is working well, and there are over 10,000 canisters in competition. But what about the other projects running on the European Subnet?

Should we consider moving to a different Subnet, or is there a better solution for this situation?

1 Like

`The replica returned a rejection error: reject code CanisterError, reject message Cannot increase compute allocation to 1% due to insufficient cycles. At least 16_332_399_480_419 additional cycles are required., error code None`

Yes a compute allocation is something your canister pays for, so it would increase the amount of cycles you need to avoid getting frozen.

Is it odd that my canister would have burned like 8T cycles overnight while just trying to stop?

(This is not a BOB canister it just a motoko canister)

Set it to 1 and the canister stopped immediately.

This seems very odd to me that it would not get scheduled over the course of hours. I’m curios if this might have something to do with the timer implementation in motoko. @ggreif or @claudio Do you all know if perhaps recurring timers have some kind of lower priority than other kind of calls?

@manu What effect will this 1% have on my cycle consumption? I just have to have a higher balance?

I think it did get scheduled, but not quickly enough. Stopping requests time out, I believe after 5 minutes. This is to avoid a situation where your canister would otherwise potentially be in a forever stopping state (eg because of outstanding call contexts).

See Paying for resources in cycles | Internet Computer, so 0.0000133661\$ per second or 35\$ per month.

To the replica there are only single-expiry timers. It is up to the replica how to schedule them. The Motoko RTS simply pulls as many individual timers from the priority queue (max 10 a.t.m.) as are expired and runs them, adding back recurring ones. Then it computes the next global expiry and adds it to the replica.