Initial commit with 🏗️ create-eth @ 2.0.4

This commit is contained in:
han
2026-01-23 20:20:58 +07:00
commit b330aba2b4
185 changed files with 36981 additions and 0 deletions

View 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);
}
}