It is possible to 'stake' EOS tokens, either for yourself or for other users and/or contracts. Further, the staking can be done as either CPU staking or bandwidth staking.
What is the purpose of this, and why is it necessary?
The economic purpose of staking is to provably commit to a promise that you won't sell the staked tokens for a pre-established period of time. This means that you undertake the duty of holding your tokens through the process of inflation as BPs mint more coins as a reward for their services. Therefore, staking is how you pay the producers for offering computational services: holding a digital token whose scarcity is perpetually affected by the BP reward system.
From a technical perspective, the entry point for staking is the delegatebw()
method which is handled by the eosio.system
contract to enforce the requirements on your usage to fulfil your promise.
To the best of my understanding, the EOS system allows users to interact with smart contracts, but in order for this interaction to occur, the contract needs to have enough CPU power and bandwidth to accept the user's actions and then process them. This is the reason that staking tokens is important.
The tokens in the system indicate the share of resources available to the owner of those tokens. If they are staked then the user/contract has access to CPU and bandwidth.