Request form
ERC20 Token Staking with Infinite Rewards
  • Staking
  • Token
  • ERC20
  • No-Code Deploy
Docs
Source
ChefGPT

ERC20 Token Staking with Infinite Rewards

Token staking contract that rewards stakers with an exact number of ERC20 tokens per period for every token staked. On deployment, the owner specifies a reward rate, and an address that tokens will be pulled from. Neither of these can be changed. The per token rate stays the same even when the total number of staked tokens increases/decreases. A common usecase is for blockchain-based games, where holding tokens rewards a certain number of lives per day.

TokenStakingPerToken :
Token staking contract that rewards stakers with an exact number of ERC20 tokens per period for every token staked. On deployment, the owner specifies a reward rate, and an address that tokens will be pulled from. Neither of these can be changed. The per token rate stays the same even when the total number of staked tokens increases/decreases. A common usecase is for blockchain-based games, where holding tokens rewards a certain number of lives per day.
available(address) :
returns the number of reward tokens available for an address
redeem() :
redeems all of a user's reward tokens.
stake(uint256) :
stakes an amount of tokens
withdraw(uint256) :
withdraws tokens
Context :
Provides information about the current execution context, including the sender of the transaction and its data. While these are generally available via msg.sender and msg.data, they should not be accessed in such a direct manner, since when dealing with meta-transactions the account sending and paying for execution may not be the actual sender (as far as an application is concerned). This contract is only required for intermediate, library-like contracts.
IERC20 :
Interface of the ERC20 standard as defined in the EIP.
Approval(address,address,uint256) :
Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance.
Transfer(address,address,uint256) :
Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero.
allowance(address,address) :
Returns the remaining number of tokens that `spender` will be allowed to spend on behalf of `owner` through {transferFrom}. This is zero by default. This value changes when {approve} or {transferFrom} are called.
approve(address,uint256) :
Sets `amount` as the allowance of `spender` over the caller's tokens. Returns a boolean value indicating whether the operation succeeded. IMPORTANT: Beware that changing an allowance with this method brings the risk that someone may use both the old and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 Emits an {Approval} event.
balanceOf(address) :
Returns the amount of tokens owned by `account`.
totalSupply() :
Returns the amount of tokens in existence.
transfer(address,uint256) :
Moves `amount` tokens from the caller's account to `to`. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.
transferFrom(address,address,uint256) :
Moves `amount` tokens from `from` to `to` using the allowance mechanism. `amount` is then deducted from the caller's allowance. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.
token-staking-with-infinite-rewards.sol
Context.sol
IERC20.sol

122 downloads

Solidity Version

0.8.15

Creator

Cookbook
Cookbook / ERC20 Token Staking with Infinite Rewards
  • Staking
  • Token
  • ERC20
  • No-Code Deploy
Docs
Source
ChefGPT
Expand
Share

Get Cookin'
star icon122

122 downloads

Solidity Version

0.8.15

Creator

Cookbook

ERC20 Token Staking with Infinite Rewards

Token staking contract that rewards stakers with an exact number of ERC20 tokens per period for every token staked. On deployment, the owner specifies a reward rate, and an address that tokens will be pulled from. Neither of these can be changed. The per token rate stays the same even when the total number of staked tokens increases/decreases. A common usecase is for blockchain-based games, where holding tokens rewards a certain number of lives per day.

TokenStakingPerToken :
Token staking contract that rewards stakers with an exact number of ERC20 tokens per period for every token staked. On deployment, the owner specifies a reward rate, and an address that tokens will be pulled from. Neither of these can be changed. The per token rate stays the same even when the total number of staked tokens increases/decreases. A common usecase is for blockchain-based games, where holding tokens rewards a certain number of lives per day.
available(address) :
returns the number of reward tokens available for an address
redeem() :
redeems all of a user's reward tokens.
stake(uint256) :
stakes an amount of tokens
withdraw(uint256) :
withdraws tokens
Context :
Provides information about the current execution context, including the sender of the transaction and its data. While these are generally available via msg.sender and msg.data, they should not be accessed in such a direct manner, since when dealing with meta-transactions the account sending and paying for execution may not be the actual sender (as far as an application is concerned). This contract is only required for intermediate, library-like contracts.
IERC20 :
Interface of the ERC20 standard as defined in the EIP.
Approval(address,address,uint256) :
Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance.
Transfer(address,address,uint256) :
Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero.
allowance(address,address) :
Returns the remaining number of tokens that `spender` will be allowed to spend on behalf of `owner` through {transferFrom}. This is zero by default. This value changes when {approve} or {transferFrom} are called.
approve(address,uint256) :
Sets `amount` as the allowance of `spender` over the caller's tokens. Returns a boolean value indicating whether the operation succeeded. IMPORTANT: Beware that changing an allowance with this method brings the risk that someone may use both the old and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 Emits an {Approval} event.
balanceOf(address) :
Returns the amount of tokens owned by `account`.
totalSupply() :
Returns the amount of tokens in existence.
transfer(address,uint256) :
Moves `amount` tokens from the caller's account to `to`. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.
transferFrom(address,address,uint256) :
Moves `amount` tokens from `from` to `to` using the allowance mechanism. `amount` is then deducted from the caller's allowance. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.
token-staking-with-infinite-rewards.sol
Context.sol
IERC20.sol