账户
0x0b...3ad3
0x0B...3ad3

0x0B...3ad3

$500
此合同的源代码已经过验证!
合同元数据
编译器
0.8.26+commit.8a97fa7a
语言
Solidity
合同源代码
文件 1 的 1:BridgeB.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.26;

interface IERC20 {
    function mintTo(address to, uint256 amount) external;
    function burnFrom(address from, uint256 amount) external;
    function transfer(address to, uint256 amount) external returns (bool);
}

contract BridgeB {
    mapping(string => bool) public _usedTxRefs;

    event IncomingBridgeRequest(address indexed sender, uint256 amount);
    event BridgeProcessed(address indexed receiver, uint256 amount, string txRef);

    address public owner;
    IERC20 public token = IERC20(0x1D7ECbD285bC74D88d922E40D7b443CFa52420e9);

    modifier onlyOwner {
        require(msg.sender == owner, "Caller is not the owner");
        _;
    }

    constructor() {
        owner = msg.sender;
    }

    function transferOwnership(address newOwner) public onlyOwner {
        require(newOwner != address(0), "New owner cannot be zero address");
        owner = newOwner;
    }

    function changeToken(address erc20Address) public onlyOwner{
        token = IERC20(erc20Address);
    }

    function processBridgeRequest(address receiver, uint256 amount, string memory txRef) external onlyOwner {
        require(receiver != address(0), "Invalid receiver address");
        require(amount > 0, "Amount must be greater than zero");
        require(!_usedTxRefs[txRef], "Transaction reference already used");

        _usedTxRefs[txRef] = true;

        token.mintTo(receiver, amount);

        emit BridgeProcessed(receiver, amount, txRef);
    }

    function createBridgeRequest(uint256 amount) external {
        require(amount > 0, "Amount must be greater than zero");
        
        // Burn tokens from the sender
        token.burnFrom(msg.sender, amount);

        emit IncomingBridgeRequest(msg.sender, amount);
    }

    function recoverERC20(address tokenAddress, uint256 amount) external onlyOwner {
        require(tokenAddress != address(0), "Invalid token address");
        require(amount > 0, "Amount must be greater than zero");
        
        IERC20 recoverToken = IERC20(tokenAddress);
        bool success = recoverToken.transfer(owner, amount);
        require(success, "Recover ERC20 failed");
    }

    function recoverNativeCurrency() external onlyOwner {
        (bool success, ) = owner.call{value: address(this).balance}("");
        require(success, "Recover native currency failed");
    }
}
设置
{
  "compilationTarget": {
    "contracts/BridgeB.sol": "BridgeB"
  },
  "evmVersion": "paris",
  "libraries": {},
  "metadata": {
    "bytecodeHash": "ipfs",
    "useLiteralContent": true
  },
  "optimizer": {
    "enabled": true,
    "runs": 200
  },
  "remappings": []
}
ABI
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"receiver","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"string","name":"txRef","type":"string"}],"name":"BridgeProcessed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"IncomingBridgeRequest","type":"event"},{"inputs":[{"internalType":"string","name":"","type":"string"}],"name":"_usedTxRefs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"erc20Address","type":"address"}],"name":"changeToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"createBridgeRequest","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"string","name":"txRef","type":"string"}],"name":"processBridgeRequest","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"recoverERC20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"recoverNativeCurrency","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"token","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]