文件 1 的 2:ETHBRIDGE.sol
pragma solidity ^0.7.6;
import './IToken.sol';
contract BRIDGEETH {
address public admin;
IToken public token;
uint256 public taxfee;
constructor(address _token) {
admin = msg.sender;
token = IToken(_token);
taxfee = 500;
}
function burn(uint amount) external {
token.transferFrom(msg.sender, address(this), amount-(taxfee*(10**(token.decimals()))));
token.transferFrom(msg.sender, admin, (taxfee*(10**(token.decimals()))));
}
function mint(address to, uint amount) external {
require(msg.sender == admin, 'only admin');
token.transferFrom(admin, to, amount);
}
function getContractTokenBalance() external view returns (uint256) {
return token.balanceOf(address(this));
}
function withdraw(uint amount) external {
require(msg.sender == admin, 'only admin');
token.transfer(msg.sender, amount);
}
function changeAdmin(address newAdmin) external {
require(msg.sender == admin, 'only admin');
admin = newAdmin;
}
function setTaxFee(uint newTaxFee) external {
require(msg.sender == admin, 'only admin');
taxfee = newTaxFee;
}
}
文件 2 的 2:IToken.sol
pragma solidity ^0.7.6;
interface IToken {
function mint(address to, uint amount) external;
function burn(address owner, uint amount) external;
function burnFrom(address account, uint256 amount) external;
function totalSupply() external view returns (uint256);
function decimals() external view returns (uint8);
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);
event Transfer(address indexed from, address indexed to, uint256 value);
event Approval(address indexed owner, address indexed spender, uint256 value);
}
{
"compilationTarget": {
"ETHBRIDGE.sol": "BRIDGEETH"
},
"evmVersion": "istanbul",
"libraries": {},
"metadata": {
"bytecodeHash": "ipfs"
},
"optimizer": {
"enabled": false,
"runs": 200
},
"remappings": []
}
[{"inputs":[{"internalType":"address","name":"_token","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"admin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAdmin","type":"address"}],"name":"changeAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getContractTokenBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newTaxFee","type":"uint256"}],"name":"setTaxFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"taxfee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"token","outputs":[{"internalType":"contract IToken","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]