📈The Euler Model
This page is for anyone interested in understanding how the Euler model can be implemented to efficiently distribute rewards paid in ETH to millions of users with negligble gas costs
Last updated
struct Staker {
uint256 amountStaked;
uint256 euler0;
}
uint256[] public euler;
mapping(address => Staker) public stakers;
function updateEuler(uint256 Fee) internal {
if (euler.length == 0){
euler.push((Fee*bigNumber)/totalSupply);
}else{
euler.push(euler[euler.length - 1] + (Fee*bigNumber)/totalSupply);
}
}
//alternatively can be the receive() function if ETH is sent directly
//to this contract
function contributeETH() external payable nonReentrant {
updateEuler(msg.value);
}
function updateStaker(address user) external {
if (euler.length == 0){
stakers[user] = Staker(balanceOf[user], 0);
}else{
stakers[user] = Staker(balanceOf[user], euler[euler.length - 1]);
}
}
//+ stake/unstake/claim functions
function viewShare() public view returns (uint256 share) {
if (euler.length == 0){
return 0;
}else{
return stakers[msg.sender].amountStaked * (euler[euler.length - 1] - stakers[msg.sender].euler0)/bigNumber;
}
}