账户
0x45...0454
0x45...0454

0x45...0454

$500
此合同的源代码已经过验证!
合同元数据
编译器
0.8.14+commit.80d49f37
语言
Solidity
合同源代码
文件 1 的 2:BV3A.sol
// SPDX-License-Identifier: MIT
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 to set the BV3A token address, only callable by the contract owner
            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);
            }


            // View function to check the total amount of BV3A tokens received by the contract
            function getTotal_BV3A_Received() external view returns (uint256) {
                return totalBV3AReceived;
            }

            // View function to check the amount of BV3A tokens contributed by a specific user
            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
// SPDX-License-Identifier: MIT
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": []
}
ABI
[{"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"}]