Initial commit with 🏗️ create-eth @ 2.0.4
This commit is contained in:
65
packages/hardhat/contracts/01_Staking/OracleToken.sol
Normal file
65
packages/hardhat/contracts/01_Staking/OracleToken.sol
Normal file
@@ -0,0 +1,65 @@
|
||||
// SPDX-License-Identifier: MIT
|
||||
pragma solidity >=0.8.0 <0.9.0;
|
||||
|
||||
import "@openzeppelin/contracts/token/ERC20/ERC20.sol";
|
||||
import "@openzeppelin/contracts/access/Ownable.sol";
|
||||
|
||||
contract ORA is ERC20, Ownable {
|
||||
//////////////////
|
||||
/// Constants ////
|
||||
//////////////////
|
||||
|
||||
// 0.5 ETH = 100 ORA => 1 ETH = 200 ORA (18 decimals)
|
||||
uint256 public constant ORA_PER_ETH = 200;
|
||||
|
||||
//////////////////////
|
||||
/// State Variables //
|
||||
//////////////////////
|
||||
|
||||
////////////////
|
||||
/// Events /////
|
||||
////////////////
|
||||
|
||||
event OraPurchased(address indexed buyer, uint256 ethIn, uint256 oraOut);
|
||||
event EthWithdrawn(address indexed to, uint256 amount);
|
||||
|
||||
/////////////////
|
||||
/// Errors //////
|
||||
/////////////////
|
||||
|
||||
error EthTransferFailed();
|
||||
|
||||
constructor() ERC20("Oracle Token", "ORA") Ownable(msg.sender) {
|
||||
// Mint initial supply to the contract deployer
|
||||
_mint(msg.sender, 1000000000000 ether);
|
||||
}
|
||||
|
||||
function mint(address to, uint256 amount) public onlyOwner {
|
||||
_mint(to, amount);
|
||||
}
|
||||
|
||||
function burn(uint256 amount) public {
|
||||
_burn(msg.sender, amount);
|
||||
}
|
||||
|
||||
/**
|
||||
* @notice Buy ORA at a fixed rate by sending ETH. Mints directly to the buyer.
|
||||
*/
|
||||
receive() external payable {
|
||||
_buy(msg.sender);
|
||||
}
|
||||
|
||||
function buy() external payable {
|
||||
_buy(msg.sender);
|
||||
}
|
||||
|
||||
function quoteOra(uint256 ethAmountWei) public pure returns (uint256) {
|
||||
return ethAmountWei * ORA_PER_ETH;
|
||||
}
|
||||
|
||||
function _buy(address buyer) internal {
|
||||
uint256 oraOut = quoteOra(msg.value);
|
||||
_mint(buyer, oraOut);
|
||||
emit OraPurchased(buyer, msg.value, oraOut);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user