I had enough. I fell in love with WAX from the moment I saw her. She was new, she was shiny and she was doing all the right things. That honeymoon period lasted such a long time. Longer than I care to admit. I had friends yell and scream about WAX issue here and WAX issue there but I was always able to skate by those problems. Or at least they didn't effect me as long as they did other people. But this week I put my foot down. This week I had enough. I was going to get to the bottom of this CPU Error that keeps rearing it's ugly head.
Now I wrote an article previously about the WAX blockchain and what CPU, NET and RAM were and how to get some. Read it here if you want a refresher because I am going to assume you know those basics.
Let's first take a step back and look at this big picture.
I play Alien Worlds pretty much all day via https://play.pocketaliens.io/. It's a great client to play Alien Worlds without all the extra BS. I haven't logged into real Alien Worlds website in probably 2 months. And using this website I have been able to skate by a few 'WAX issues' some people have been having but not all. But I can mine every 21 minutes and do so throughout the day.
I buy and sell some NFT's on AtomicHub.
I create my own NFT's on AtomicHub and when I create a new one I send it out to my followers on Noise.Cash for free but I still have to mint each one which is a transaction. Shameless plug here.
I sparingly play Koloboks.
I sparingly collect from R-Planet (like once a week)
I sparingly collect from Green Rabbit (like once a day)
So yeah I do my fair share of transactions on the WAX blockchain. That being said though I have usually been able to keep my head above the CPU threshold just fine. I have 100.138 WAX staked to my CPU alone and it has served me fine so far. I have added 10 WAX here or there to keep it bumped up but I don't know if I can in good conscious keep that going.
What I know about WAX and CPU is that you stake your WAX to CPU to get a bucket of milliseconds to use towards your transactions. Each transaction you perform on WAX costs some amount of milliseconds. Transactions that take longer to process require more milliseconds. You CPU regenerates itself after 72 hours. So in theory you could play, play, play until you hit your limit and wait 72 hours from your last transaction and you should be back to 0 milliseconds used out of your bucket.
Simple enough right?
Well then why do we experience the CPU error all the time. Well at first I chalked it up to maybe 70 hours ago I did a lot of transactions in a short amount of time and now that I am doing enough I didn't wait long enough for my bucket to come down some. And honestly that is what I thought for a long time. But then we all started to notice things. Like one minute we would be at 80% of our CPU bucket used and 5 minutes later without performing any transactions we were at 140% of our CPU bucket used. It didn't make sense and I couldn't rationalize it. That bring us to this week. Where I had enough. I wanted to know why this was happening and what we can do to fix it. I mean if NFT's are the future and AtomicHub is WAX then for the average user and people not tech savvy there has to be a better answer then just "You need to stake more WAX to be able to do anything". Because if someone is starting out on Alien Worlds they might hit their CPU limit before they had a chance to earn enough WAX to start.
Everyone should know this basic business practice. If your customers can't use your service they, well, won't use your service at all them. If new players are unable to play the game then you won't get any new players. I am using Alien Worlds as a reference but in no way is this Alien Worlds fault. This is a problem with the WAX blockchain itself.
I started a little a little experiment. I wanted to track my CPU over a period of time without performing any transactions.
** I learned that your CPU balance gets recalculated occasionally throughout the day. Nobody really knows for sure how often but we do know it get's recalculated everytime you perform a transaction. So I figured the least cost transaction would be to sign into my Wax Cloud wallet and just refresh it every time I wanted to check my CPU balance and this turned out to be the best option **
Here are the results:

You can see that the percentage of my CPU bucket I was using fluctuated from 92% all the way up to 126%. Now any logical person would see that and wonder "If I am allocated a specific amount of millisecond bucket to use how could I go over that amount, especially by doing nothing". And that logical person would be dead on the money. It doesn't make any sense on the surface. There has to be more than meets eye on this one.

I did what any person in the year 2021 would do. I started searching online for the answer. And boy there are more accounts of CPU errors than I can count. It seems like it has effected everyone who utilizes the WAX blockchain it seems like. There are threads on Discord, Reddit, blogging sites. Do you know how I knew I was in for a long ride? I searched "What is WAX CPU" and guess what was the third result......

My article published on Publish0x from January of this year. Yep it was at that point that I knew I was going to have dig deep. Here are some of the sites that I found:
https://medium.com/wax-io/what-is-net-cpu-and-ram-on-the-wax-blockchain-e17d2ff9855e
What I quickly learned is that your total used CPU is not a static number. What I was initially told was that the WAX blockchain had a static amount of CPU power and however much you staked towards CPU meant you got that same percentage of CPU to utilize. Well that's not entirely true. First let's look at how much WAX is staked

You can see that there is 1,751,269,675 WAX staked at the moment. That is 46% of all WAX is being staked. I don't know about you guys but I only have 100 WAX staked to CPU. So by comparison to the over 1 billion WAX staked I am not staking much of all. But we also need to take into account that there are big players here that stake a lot of CPU. So let's look at the account that stake the most WAX.

Yeah I will let you look through that list and just feel bad about yourself like I do now.
But I wanted to get back into why my used CPU changes. The amount in my bucket never changed during my experiment. It stayed at 13.15ms because I didn't stake anymore to get more into my bucket. Which also means I still had the same percentage of staked WAX to CPU throughout my experiment. Which was my first guess that people where staking and unstaking CPU WAX and that is what the fluctuation was. With that possible solution marked off let's move on to another.
I was to put this disclaimer in here as I have not been able to find out for sure 100% the reason why.
Turns out the WAX blockchain is very sneaky with this data.
I have read a few places that the reason we get the CPU error is because of the total number of transactions on the WAX blockchain fluctuates and so there by our CPU bucket fluctuates with it. If there are a ton of transactions going on this minute then the amount of CPU used is going to change. I tried to think of a simple way to explain it best I could to you guys. Here is what I came up with.

Let's say for argument sake the total CPU power is 100 seconds. Let's also say that on a average day 50% of the CPU power is used up by transactions, And the other 50% is allocated to staking CPU. For this example I am going to say that I stake 50% of the total staked CPU which would be 25% of total CPU power.
Total Seconds: 100 seconds
Transactions: 50 seconds
Staked WAX for CPU: 50 seconds
TrocProcLock's total CPU for staking 50% of all WAX: 25 seconds.
Now for argument sake let us assume that I am using 90% of my total CPU power so that would be 22.5 seconds of my total 25 seconds.
And now let's assume ThunderDome finally gets released for Alien Worlds and everyone starts mining again, they start sending minions on missions, and they are buying NFT's left and right. The amount of transactions is going to go up.

So the amount of transactions goes up to 75% of all CPU Power on WAX. Which means that the amount of CPU that is available to Staked CPU people is 25% of the total amount. And since I have 50% of all staked WAX I get 12.5% of all available CPU.
Total Seconds: 100 seconds
Transactions: 75 seconds
Staked WAX for CPU: 25 seconds
TrocProcLock's total CPU for staking 50% of all WAX: 12.5 seconds.
And since I was using 90% of my power before, that means I was using 22.5 seconds when I only have 12.5 seconds. So I am now using 180% of my CPU bucket and won't be able to perform any transactions until I stake more or it goes back down organically.
That is the easiest way I can explain it. I just did another quick test. I quickly as I could staked 10 WAX five times.

You can see my total CPU bucket would go up each time (except 2nd to last when I assume the transactions on the blockchain went up).
It appears the only way to get past this utter BS that is CPU staking on WAX Blockchain is to just keep staking more CPU. The only problem with that is the more we all stake the less of a percentage the rest of us have. That isn't a huge issue because there are people staking millions of WAX. So us going from say 10 WAX to 100 WAX is not going to effect us other little guys noticeably.
The part that is concerning to me though that I have leaned through ALL of this research was that the WAX Blockchain doesn't want to tell us the secret sauce to this. I read their Whitepaper. They have links in their whitepaper that are dead links as well.
This is all they talk about CPU in their Whitepaper:

Oh and that beautiful link at the bottom that looks like it would be the answer I need? Go ahead click on it yourself and see where it goes.
https://wax.io/blog/what-is-net-cpu-and-ram-on-the-wax-blockchain
It redirects to https://on.wax.io/wax-io/. Which is completely pointless.
I even started to dig through their GitHub to see if I could find anything else helpful. All the repositories I found are literally no help to me finding out more info on WAX.
Closing Thoughts:
After all that it sucks I don't have any good answers for you guys. The only thing I can offer is what we already knew and that is to get more CPU you need to stake more CPU. I understand why they choose the PoS method for WAX, I mean it means that transactions themselves are fee free. But that is only assuming you make a few transactions in a 72 hour period. It greatly reinforces the network from attacks as well.
I think that WAX needs to make changes though. We can't keep going down this path because it will be the death of the WAX blockchain. What is interesting in their WhitePaper they talk about how in the early days they almost went under because of Ethereum and it's gas fees. And now the way I see it they will go under because of their process to not have gas fees.
The WAX Blockchain is great in theory and it has served us well, but it is gaining in popularity and used more and more and it needs to adapt to survive. I have a few suggestions to consider.
Option 1)
Making every account CPU amount higher by default. Say that each account can make 15 transactions a day without having to stake CPU.
Then if the user stakes 10 WAX it bumps up their transactions to 25 transactions a day.
Staking 50 WAX gets you 50 transactions per day
Staking 100 WAX gets you 200 transactions a day
Staking 500 WAX gets you 1,000 transactions a day
then have the Transactions per day fall off some. That way people can still stake millions of WAX so they can vote to the Guilds they want and earn passive rewards but having someone staked 150 million WAX isn't going to screw over everyone else trying to use the platform. The person staking 150 million WAX isn't performing more than 3% of their available CPU, I know because I checked the top accounts already. They literally have seconds of CPU available to them and they use maybe 2% while we have milliseconds assigned to us and we have used 150%+ of it at times.
Option 2)
Make it possible to utilize WAX to process a transaction when your CPU is to high. We already get a popup to approve transactions. Why can't that screen show "You are at 14ms of your 13.5ms bucket. Do you want to spend 0.00001 WAX to process this transaction". It would be a clear choice the user can make to process transactions without effecting their CPU. That way if they really need to buy a new NFT drop but are out of CPU they still could.
Guys I know this was a long article and I appreciate if you stuck around through it all. Please let me know what you think and if you could offer any insight into the interworking of WAX I am all for it.