编译器
0.8.18+commit.87f61d96
文件 1 的 2:BurnXenBitcoinEth.sol
pragma solidity ^0.8.0;
import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
contract ConvertXenBitcoinEthereumX1 {
address public XBTC;
address public USDC;
mapping(address => uint256) public amountXBTCBurned;
mapping(address => uint256) public amountUSDCDeposited;
address[] public addresses;
mapping(address => uint256) public futureXBTC;
uint256 public totalXBTCBurned;
uint256 public totalUSDCDeposited;
address private constant DEAD_ADDRESS = address(0x000000000000000000000000000000000000dEaD);
address private constant BA_ADDRESS = address(0x99726763dd9C1537EDd27CC384ED3808E475F81C);
event BurnXBTC(address indexed burner, uint indexed _amount, uint indexed currentTime);
event DepositUSDC(address indexed burner, uint indexed _amount, uint indexed currentTime);
constructor(address _XBTC, address _USDC) {
XBTC = _XBTC;
USDC = _USDC;
}
function burnXBTC(uint amount) public {
require(amount > 0, "amount can't be zero");
require(IERC20(XBTC).transferFrom(msg.sender, DEAD_ADDRESS, amount), "transferFrom failed.");
if (futureXBTC[msg.sender] == 0) {
addresses.push(msg.sender);
}
amountXBTCBurned[msg.sender] += amount;
futureXBTC[msg.sender] += amount * 10_000;
totalXBTCBurned += amount;
emit BurnXBTC(msg.sender, amount, block.timestamp);
}
function depositUSDC(uint amount) public {
require(amount > 0, "amount can't be zero");
require(amount + totalUSDCDeposited <= 5_000_000 * 1e6);
require(IERC20(USDC).transferFrom(msg.sender, BA_ADDRESS, amount), "transferFrom failed.");
if (futureXBTC[msg.sender] == 0) {
addresses.push(msg.sender);
}
amountUSDCDeposited[msg.sender] += amount;
futureXBTC[msg.sender] += amount * 1e12 * 100_000;
totalUSDCDeposited += amount;
emit DepositUSDC(msg.sender, amount, block.timestamp);
}
}
文件 2 的 2:IERC20.sol
pragma solidity ^0.8.0;
interface IERC20 {
event Transfer(address indexed from, address indexed to, uint256 value);
event Approval(address indexed owner, address indexed spender, uint256 value);
function totalSupply() external view returns (uint256);
function balanceOf(address account) external view returns (uint256);
function transfer(address to, uint256 amount) external returns (bool);
function allowance(address owner, address spender) external view returns (uint256);
function approve(address spender, uint256 amount) external returns (bool);
function transferFrom(address from, address to, uint256 amount) external returns (bool);
}
{
"compilationTarget": {
"contracts/BurnXenBitcoinEth.sol": "ConvertXenBitcoinEthereumX1"
},
"evmVersion": "paris",
"libraries": {},
"metadata": {
"bytecodeHash": "ipfs"
},
"optimizer": {
"enabled": false,
"runs": 200
},
"remappings": []
}
[{"inputs":[{"internalType":"address","name":"_XBTC","type":"address"},{"internalType":"address","name":"_USDC","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"burner","type":"address"},{"indexed":true,"internalType":"uint256","name":"_amount","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"currentTime","type":"uint256"}],"name":"BurnXBTC","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"burner","type":"address"},{"indexed":true,"internalType":"uint256","name":"_amount","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"currentTime","type":"uint256"}],"name":"DepositUSDC","type":"event"},{"inputs":[],"name":"USDC","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"XBTC","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"addresses","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"amountUSDCDeposited","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"amountXBTCBurned","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burnXBTC","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"depositUSDC","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"futureXBTC","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalUSDCDeposited","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalXBTCBurned","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]