编译器
0.8.14+commit.80d49f37
文件 1 的 2:BV3A.sol
pragma solidity ^0.8.0;
import "../Utility/owner.sol";
interface IBV3A {
function approve(address spender, uint256 amount) external returns (bool);
function transferFrom(address from, address to, uint256 amount) external returns (bool);
function balanceOf(address account) external view returns (uint256);
}
contract BV3ASwap is Owner {
IBV3A public bv3aToken;
uint256 public totalBV3AReceived;
mapping(address => uint256) public userContributions;
mapping(uint256 => address[]) public userGroups;
mapping(uint256 => uint256[]) public userGroupAmounts;
uint256 public currentGroup = 1;
uint256 private constant MAX_USERS_PER_GROUP = 20;
uint256 private constant MIN_TRANSFER_AMOUNT = 10 * 10**18;
function setBV3ATokenAddress(address _bv3aTokenAddress) external onlyOwner {
bv3aToken = IBV3A(_bv3aTokenAddress);
}
function approveBV3A(uint256 _amount) external {
require(bv3aToken.approve(address(this), _amount), "Approval failed");
}
function transferFromUser(uint256 _amount) external {
require(_amount >= MIN_TRANSFER_AMOUNT, "Transfer amount is less than minimum required");
require(bv3aToken.transferFrom(msg.sender, address(this), _amount), "Transfer failed");
totalBV3AReceived += _amount;
userContributions[msg.sender] += _amount;
if (userGroups[currentGroup].length >= MAX_USERS_PER_GROUP) {
currentGroup++;
}
userGroups[currentGroup].push(msg.sender);
userGroupAmounts[currentGroup].push(_amount);
}
function getTotal_BV3A_Received() external view returns (uint256) {
return totalBV3AReceived;
}
function getUserContribution(address _user) external view returns (uint256) {
return userContributions[_user];
}
function getADDRESSESUserGroupAmounts(uint256 groupNumber) external view returns (address[] memory) {
return userGroups[groupNumber];
}
function getUserGroupAmounts(uint256 groupNumber) external view returns (uint256[] memory) {
return userGroupAmounts[groupNumber];
}
function getUserGroupDoubledAmounts(uint256 groupNumber) external view returns (uint256[] memory) {
uint256[] memory originalAmounts = userGroupAmounts[groupNumber];
uint256[] memory doubledAmounts = new uint256[](originalAmounts.length);
for (uint i = 0; i < originalAmounts.length; i++) {
doubledAmounts[i] = originalAmounts[i] * 2;
}
return doubledAmounts;
}
}
文件 2 的 2:owner.sol
pragma solidity ^0.8.0;
contract Owner {
address public _owner;
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
constructor() {
_owner = msg.sender;
emit OwnershipTransferred(address(0), _owner);
}
modifier onlyOwner() {
require(isOwner(), "You are not the owner");
_;
}
function transferOwnership(address newOwner) public onlyOwner {
require(newOwner != address(0), "New owner is the zero address");
emit OwnershipTransferred(_owner, newOwner);
_owner = newOwner;
}
function isOwner() public view returns (bool) {
return msg.sender == _owner;
}
function getOwner() public view returns (address) {
return _owner;
}
}
{
"compilationTarget": {
"NEW_BV3/SWAPS/BV3A.sol": "BV3ASwap"
},
"evmVersion": "london",
"libraries": {},
"metadata": {
"bytecodeHash": "ipfs"
},
"optimizer": {
"enabled": false,
"runs": 200
},
"remappings": []
}
[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[],"name":"_owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"approveBV3A","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"bv3aToken","outputs":[{"internalType":"contract IBV3A","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentGroup","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"groupNumber","type":"uint256"}],"name":"getADDRESSESUserGroupAmounts","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotal_BV3A_Received","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"getUserContribution","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"groupNumber","type":"uint256"}],"name":"getUserGroupAmounts","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"groupNumber","type":"uint256"}],"name":"getUserGroupDoubledAmounts","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_bv3aTokenAddress","type":"address"}],"name":"setBV3ATokenAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalBV3AReceived","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"transferFromUser","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"userContributions","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"userGroupAmounts","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"userGroups","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}]