mirror of
https://github.com/logos-messaging/logos-messaging-rlnv2-contract.git
synced 2026-01-10 09:53:11 +00:00
This allows the contract to transfer ownership to address 0x000...000 as defined in https://github.com/waku-org/specs/pull/34: `At some point, the _Owner_ SHOULD renounce their privileges, and the contract MUST become immutable`. The problem with `Ownable2StepUpgradeable` is that it requires accepting the ownership transfer, which is not possible with address 0x0
46 lines
2.0 KiB
Solidity
46 lines
2.0 KiB
Solidity
// SPDX-License-Identifier: MIT
|
|
pragma solidity 0.8.24;
|
|
|
|
import { Ownable } from "openzeppelin-contracts/contracts/access/Ownable.sol";
|
|
import { IPriceCalculator } from "./IPriceCalculator.sol";
|
|
|
|
/// Address 0x0000...0000 was used instead of an ERC20 token address
|
|
error OnlyTokensAllowed();
|
|
|
|
/// @title Linear Price Calculator to determine the price to acquire a membership
|
|
contract LinearPriceCalculator is IPriceCalculator, Ownable {
|
|
/// @notice Address of the ERC20 token accepted by this contract.
|
|
address public token;
|
|
|
|
/// @notice The price per message per epoch
|
|
uint256 public pricePerMessagePerEpoch;
|
|
|
|
constructor(address _token, uint256 _pricePerMessagePerEpoch) Ownable() {
|
|
_setTokenAndPrice(_token, _pricePerMessagePerEpoch);
|
|
}
|
|
|
|
/// Set accepted token and price per message per epoch per period
|
|
/// @param _token The token accepted by RLN membership management
|
|
/// @param _pricePerMessagePerEpoch Price per message per epoch
|
|
function setTokenAndPrice(address _token, uint256 _pricePerMessagePerEpoch) external onlyOwner {
|
|
_setTokenAndPrice(_token, _pricePerMessagePerEpoch);
|
|
}
|
|
|
|
/// Set accepted token and price per message per epoch per period
|
|
/// @param _token The token accepted by RLN membership management
|
|
/// @param _pricePerMessagePerEpoch Price per message per epoch
|
|
function _setTokenAndPrice(address _token, uint256 _pricePerMessagePerEpoch) internal {
|
|
if (_token == address(0)) revert OnlyTokensAllowed();
|
|
token = _token;
|
|
pricePerMessagePerEpoch = _pricePerMessagePerEpoch;
|
|
}
|
|
|
|
/// Returns the token and price to pay in `token` for some `_rateLimit`
|
|
/// @param _rateLimit the rate limit the user wants to acquire
|
|
/// @return address of the erc20 token
|
|
/// @return uint price to pay for acquiring the specified `_rateLimit`
|
|
function calculate(uint32 _rateLimit) external view returns (address, uint256) {
|
|
return (token, uint256(_rateLimit) * pricePerMessagePerEpoch);
|
|
}
|
|
}
|