false
false

Contract Address Details

0x0915EaE769D68128EEd9711A0bc4097831BE57F3

Contract Name
Bridge
Creator
0x914dff–98b131 at 0x25b897–57a7ab
Balance
93.804078139999999997 ETH ( )
Tokens
Fetching tokens...
Transactions
1,003 Transactions
Transfers
6,391 Transfers
Gas Used
295,416,305
Last Balance Update
57941809
Contract name:
Bridge




Optimization enabled
true
Compiler version
v0.8.15+commit.e14f2714




Optimization runs
200
EVM Version
default




Verified at
2022-07-29T13:20:17.460389Z

Constructor Arguments

0000000000000000000000003c84b6c98fbeb813e05a7a7813f0442883450b1f000000000000000000000000181251d3a501961d4af2af46e33c71a5d808c25b

Arg [0] (address) : 0x3c84b6c98fbeb813e05a7a7813f0442883450b1f
Arg [1] (address) : 0x181251d3a501961d4af2af46e33c71a5d808c25b

              

Contract source code

// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.8.0 <0.9.0;

interface Factory {
    function contracts(uint256 id) external view returns (address);
}

interface IERC20 {
    function transferWithExtra(
        address to,
        uint256 value,
        bytes memory extra
    ) external returns (bool);

    function transferFrom(
        address from,
        address to,
        uint256 value
    ) external returns (bool);
}

contract Bridge {
    uint256 public constant BASE = 10000000000;

    address public immutable FACTORY;
    address public immutable XIN;
    address public immutable OWNER;
    mapping(address => address) public bridges;

    event Vault(address indexed from, uint256 amount);
    event Bound(address indexed from, address indexed to);
    event Through(
        address indexed asset,
        address indexed from,
        address indexed to,
        uint256 amount
    );

    constructor(address factory, address xin) {
        FACTORY = factory;
        XIN = xin;
        OWNER = msg.sender;
    }

    receive() external payable {
        if (msg.sender == OWNER) {
            emit Vault(msg.sender, msg.value / BASE);
            return;
        }

        address receiver = bridges[msg.sender];
        require(receiver != address(0), "no address bound");

        release(receiver, new bytes(0));
    }

    function release(address receiver, bytes memory input) public payable {
        uint256 amount = msg.value / BASE;
        require(amount > 0, "value too small");

        address bound = bridges[msg.sender];
        require(bound == address(0) || receiver == bound, "bound not match");

        IERC20(XIN).transferWithExtra(receiver, amount, input);
        emit Through(XIN, msg.sender, receiver, amount);
    }

    function vault(address asset, uint256 amount) public {
        asset = canonical(asset);
        require(asset == XIN, "only XIN accepted");
        IERC20(asset).transferFrom(msg.sender, address(this), amount);
        emit Vault(msg.sender, amount);
    }

    function bind(address receiver) public {
        require(receiver != address(0), "invalid address");
        bridges[msg.sender] = receiver;
        emit Bound(msg.sender, receiver);
    }

    function pass(address asset, uint256 amount) public {
        address receiver = bridges[msg.sender];
        require(receiver != address(0), "no address bound");
        require(amount > 0, "too small");

        asset = canonical(asset);
        if (asset == XIN) {
            passXIN(receiver, amount);
        } else {
            IERC20(asset).transferFrom(msg.sender, receiver, amount);
        }

        emit Through(asset, msg.sender, receiver, amount);
    }

    function passXIN(address receiver, uint256 amount) internal {
        IERC20(XIN).transferFrom(msg.sender, address(this), amount);
        payable(receiver).transfer(amount * BASE);
    }

    function canonical(address asset) internal view returns (address) {
        uint256 id = uint256(uint160(asset));
        address another = Factory(FACTORY).contracts(id);
        if (another != address(0)) {
            return another;
        }
        return asset;
    }
}
        

Contract ABI

[{"type":"constructor","stateMutability":"nonpayable","inputs":[{"type":"address","name":"factory","internalType":"address"},{"type":"address","name":"xin","internalType":"address"}]},{"type":"event","name":"Bound","inputs":[{"type":"address","name":"from","internalType":"address","indexed":true},{"type":"address","name":"to","internalType":"address","indexed":true}],"anonymous":false},{"type":"event","name":"Through","inputs":[{"type":"address","name":"asset","internalType":"address","indexed":true},{"type":"address","name":"from","internalType":"address","indexed":true},{"type":"address","name":"to","internalType":"address","indexed":true},{"type":"uint256","name":"amount","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"Vault","inputs":[{"type":"address","name":"from","internalType":"address","indexed":true},{"type":"uint256","name":"amount","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"BASE","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"FACTORY","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"OWNER","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"XIN","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"bind","inputs":[{"type":"address","name":"receiver","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"bridges","inputs":[{"type":"address","name":"","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"pass","inputs":[{"type":"address","name":"asset","internalType":"address"},{"type":"uint256","name":"amount","internalType":"uint256"}]},{"type":"function","stateMutability":"payable","outputs":[],"name":"release","inputs":[{"type":"address","name":"receiver","internalType":"address"},{"type":"bytes","name":"input","internalType":"bytes"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"vault","inputs":[{"type":"address","name":"asset","internalType":"address"},{"type":"uint256","name":"amount","internalType":"uint256"}]},{"type":"receive","stateMutability":"payable"}]
              

Contract Creation Code

0x60e060405234801561001057600080fd5b50604051610d7a380380610d7a83398101604081905261002f91610066565b6001600160a01b039182166080521660a0523360c052610099565b80516001600160a01b038116811461006157600080fd5b919050565b6000806040838503121561007957600080fd5b6100828361004a565b91506100906020840161004a565b90509250929050565b60805160a05160c051610c826100f860003960008181609901526101b4015260008181610259015281816103ec0152818161047f01528181610588015281816106b2015261095101526000818161020501526108950152610c826000f3fe60806040526004361061008a5760003560e01c80637ae47b95116100595780637ae47b951461024757806381bac14f1461027b578063af411b1d1461029b578063ced67f0c146102ae578063ec342ad0146102e457600080fd5b80630ed1db9f14610182578063117803e3146101a25780632dd31000146101f35780633fa16d991461022757600080fd5b3661017d576001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016330361010357337fcc189d00e17c637536854a6446232b39c2adbc24668adad4fa348e9ee1eb37b16100f06402540be40034610a10565b60405190815260200160405180910390a2005b336000908152602081905260409020546001600160a01b0316806101615760405162461bcd60e51b815260206004820152601060248201526f1b9bc81859191c995cdcc8189bdd5b9960821b60448201526064015b60405180910390fd5b60408051600081526020810190915261017b90829061030b565b005b600080fd5b34801561018e57600080fd5b5061017b61019d366004610a60565b6104e6565b3480156101ae57600080fd5b506101d67f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156101ff57600080fd5b506101d67f000000000000000000000000000000000000000000000000000000000000000081565b34801561023357600080fd5b5061017b610242366004610a60565b6106a5565b34801561025357600080fd5b506101d67f000000000000000000000000000000000000000000000000000000000000000081565b34801561028757600080fd5b5061017b610296366004610a8c565b6107d6565b61017b6102a9366004610ab0565b61030b565b3480156102ba57600080fd5b506101d66102c9366004610a8c565b6000602081905290815260409020546001600160a01b031681565b3480156102f057600080fd5b506102fd6402540be40081565b6040519081526020016101ea565b600061031c6402540be40034610a10565b9050600081116103605760405162461bcd60e51b815260206004820152600f60248201526e1d985b1d59481d1bdbc81cdb585b1b608a1b6044820152606401610158565b336000908152602081905260409020546001600160a01b03168015806103975750806001600160a01b0316846001600160a01b0316145b6103d55760405162461bcd60e51b815260206004820152600f60248201526e0c4deeadcc840dcdee840dac2e8c6d608b1b6044820152606401610158565b604051630fb423ff60e11b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690631f6847fe9061042590879086908890600401610b74565b6020604051808303816000875af1158015610444573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104689190610be0565b50836001600160a01b0316336001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03167f72d27832ca9ac59ff168a29801fcbe15464d099fb1b06cea8475d4a9d47a2248856040516104d891815260200190565b60405180910390a450505050565b336000908152602081905260409020546001600160a01b03168061053f5760405162461bcd60e51b815260206004820152601060248201526f1b9bc81859191c995cdcc8189bdd5b9960821b6044820152606401610158565b6000821161057b5760405162461bcd60e51b81526020600482015260096024820152681d1bdbc81cdb585b1b60ba1b6044820152606401610158565b61058483610875565b92507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b0316036105ce576105c9818361092f565b610649565b6040516323b872dd60e01b81523360048201526001600160a01b038281166024830152604482018490528416906323b872dd906064016020604051808303816000875af1158015610623573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106479190610be0565b505b806001600160a01b0316336001600160a01b0316846001600160a01b03167f72d27832ca9ac59ff168a29801fcbe15464d099fb1b06cea8475d4a9d47a22488560405161069891815260200190565b60405180910390a4505050565b6106ae82610875565b91507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316146107255760405162461bcd60e51b81526020600482015260116024820152701bdb9b1e48161253881858d8d95c1d1959607a1b6044820152606401610158565b6040516323b872dd60e01b8152336004820152306024820152604481018290526001600160a01b038316906323b872dd906064016020604051808303816000875af1158015610778573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061079c9190610be0565b5060405181815233907fcc189d00e17c637536854a6446232b39c2adbc24668adad4fa348e9ee1eb37b19060200160405180910390a25050565b6001600160a01b03811661081e5760405162461bcd60e51b815260206004820152600f60248201526e696e76616c6964206164647265737360881b6044820152606401610158565b3360008181526020819052604080822080546001600160a01b0319166001600160a01b03861690811790915590519092917f0d128562eaa47ab89086803e64a0f96847c0ed3cc63c26251f29ba1aede09d4e91a350565b6040516323a6d3cd60e11b81526000906001600160a01b038084169183917f0000000000000000000000000000000000000000000000000000000000000000169063474da79a906108ce90859060040190815260200190565b602060405180830381865afa1580156108eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061090f9190610c02565b90506001600160a01b03811615610927579392505050565b509192915050565b6040516323b872dd60e01b8152336004820152306024820152604481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906323b872dd906064016020604051808303816000875af11580156109a2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109c69190610be0565b506001600160a01b0382166108fc6109e36402540be40084610c1f565b6040518115909202916000818181858888f19350505050158015610a0b573d6000803e3d6000fd5b505050565b600082610a2d57634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114610a5d57600080fd5b50565b60008060408385031215610a7357600080fd5b8235610a7e81610a48565b946020939093013593505050565b600060208284031215610a9e57600080fd5b8135610aa981610a48565b9392505050565b60008060408385031215610ac357600080fd5b8235610ace81610a48565b9150602083013567ffffffffffffffff80821115610aeb57600080fd5b818501915085601f830112610aff57600080fd5b813581811115610b1157610b11610a32565b604051601f8201601f19908116603f01168101908382118183101715610b3957610b39610a32565b81604052828152886020848701011115610b5257600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b60018060a01b038416815260006020848184015260606040840152835180606085015260005b81811015610bb657858101830151858201608001528201610b9a565b81811115610bc8576000608083870101525b50601f01601f19169290920160800195945050505050565b600060208284031215610bf257600080fd5b81518015158114610aa957600080fd5b600060208284031215610c1457600080fd5b8151610aa981610a48565b6000816000190483118215151615610c4757634e487b7160e01b600052601160045260246000fd5b50029056fea26469706673582212206076d947aed954f529b60be2b696a17b4cc1c260b4a641f638870e057f20800264736f6c634300080f00330000000000000000000000003c84b6c98fbeb813e05a7a7813f0442883450b1f000000000000000000000000181251d3a501961d4af2af46e33c71a5d808c25b

Deployed ByteCode

0x60806040526004361061008a5760003560e01c80637ae47b95116100595780637ae47b951461024757806381bac14f1461027b578063af411b1d1461029b578063ced67f0c146102ae578063ec342ad0146102e457600080fd5b80630ed1db9f14610182578063117803e3146101a25780632dd31000146101f35780633fa16d991461022757600080fd5b3661017d576001600160a01b037f000000000000000000000000914dff811ef12267e1b644d9cb9b65743b98b13116330361010357337fcc189d00e17c637536854a6446232b39c2adbc24668adad4fa348e9ee1eb37b16100f06402540be40034610a10565b60405190815260200160405180910390a2005b336000908152602081905260409020546001600160a01b0316806101615760405162461bcd60e51b815260206004820152601060248201526f1b9bc81859191c995cdcc8189bdd5b9960821b60448201526064015b60405180910390fd5b60408051600081526020810190915261017b90829061030b565b005b600080fd5b34801561018e57600080fd5b5061017b61019d366004610a60565b6104e6565b3480156101ae57600080fd5b506101d67f000000000000000000000000914dff811ef12267e1b644d9cb9b65743b98b13181565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156101ff57600080fd5b506101d67f0000000000000000000000003c84b6c98fbeb813e05a7a7813f0442883450b1f81565b34801561023357600080fd5b5061017b610242366004610a60565b6106a5565b34801561025357600080fd5b506101d67f000000000000000000000000181251d3a501961d4af2af46e33c71a5d808c25b81565b34801561028757600080fd5b5061017b610296366004610a8c565b6107d6565b61017b6102a9366004610ab0565b61030b565b3480156102ba57600080fd5b506101d66102c9366004610a8c565b6000602081905290815260409020546001600160a01b031681565b3480156102f057600080fd5b506102fd6402540be40081565b6040519081526020016101ea565b600061031c6402540be40034610a10565b9050600081116103605760405162461bcd60e51b815260206004820152600f60248201526e1d985b1d59481d1bdbc81cdb585b1b608a1b6044820152606401610158565b336000908152602081905260409020546001600160a01b03168015806103975750806001600160a01b0316846001600160a01b0316145b6103d55760405162461bcd60e51b815260206004820152600f60248201526e0c4deeadcc840dcdee840dac2e8c6d608b1b6044820152606401610158565b604051630fb423ff60e11b81526001600160a01b037f000000000000000000000000181251d3a501961d4af2af46e33c71a5d808c25b1690631f6847fe9061042590879086908890600401610b74565b6020604051808303816000875af1158015610444573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104689190610be0565b50836001600160a01b0316336001600160a01b03167f000000000000000000000000181251d3a501961d4af2af46e33c71a5d808c25b6001600160a01b03167f72d27832ca9ac59ff168a29801fcbe15464d099fb1b06cea8475d4a9d47a2248856040516104d891815260200190565b60405180910390a450505050565b336000908152602081905260409020546001600160a01b03168061053f5760405162461bcd60e51b815260206004820152601060248201526f1b9bc81859191c995cdcc8189bdd5b9960821b6044820152606401610158565b6000821161057b5760405162461bcd60e51b81526020600482015260096024820152681d1bdbc81cdb585b1b60ba1b6044820152606401610158565b61058483610875565b92507f000000000000000000000000181251d3a501961d4af2af46e33c71a5d808c25b6001600160a01b0316836001600160a01b0316036105ce576105c9818361092f565b610649565b6040516323b872dd60e01b81523360048201526001600160a01b038281166024830152604482018490528416906323b872dd906064016020604051808303816000875af1158015610623573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106479190610be0565b505b806001600160a01b0316336001600160a01b0316846001600160a01b03167f72d27832ca9ac59ff168a29801fcbe15464d099fb1b06cea8475d4a9d47a22488560405161069891815260200190565b60405180910390a4505050565b6106ae82610875565b91507f000000000000000000000000181251d3a501961d4af2af46e33c71a5d808c25b6001600160a01b0316826001600160a01b0316146107255760405162461bcd60e51b81526020600482015260116024820152701bdb9b1e48161253881858d8d95c1d1959607a1b6044820152606401610158565b6040516323b872dd60e01b8152336004820152306024820152604481018290526001600160a01b038316906323b872dd906064016020604051808303816000875af1158015610778573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061079c9190610be0565b5060405181815233907fcc189d00e17c637536854a6446232b39c2adbc24668adad4fa348e9ee1eb37b19060200160405180910390a25050565b6001600160a01b03811661081e5760405162461bcd60e51b815260206004820152600f60248201526e696e76616c6964206164647265737360881b6044820152606401610158565b3360008181526020819052604080822080546001600160a01b0319166001600160a01b03861690811790915590519092917f0d128562eaa47ab89086803e64a0f96847c0ed3cc63c26251f29ba1aede09d4e91a350565b6040516323a6d3cd60e11b81526000906001600160a01b038084169183917f0000000000000000000000003c84b6c98fbeb813e05a7a7813f0442883450b1f169063474da79a906108ce90859060040190815260200190565b602060405180830381865afa1580156108eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061090f9190610c02565b90506001600160a01b03811615610927579392505050565b509192915050565b6040516323b872dd60e01b8152336004820152306024820152604481018290527f000000000000000000000000181251d3a501961d4af2af46e33c71a5d808c25b6001600160a01b0316906323b872dd906064016020604051808303816000875af11580156109a2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109c69190610be0565b506001600160a01b0382166108fc6109e36402540be40084610c1f565b6040518115909202916000818181858888f19350505050158015610a0b573d6000803e3d6000fd5b505050565b600082610a2d57634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114610a5d57600080fd5b50565b60008060408385031215610a7357600080fd5b8235610a7e81610a48565b946020939093013593505050565b600060208284031215610a9e57600080fd5b8135610aa981610a48565b9392505050565b60008060408385031215610ac357600080fd5b8235610ace81610a48565b9150602083013567ffffffffffffffff80821115610aeb57600080fd5b818501915085601f830112610aff57600080fd5b813581811115610b1157610b11610a32565b604051601f8201601f19908116603f01168101908382118183101715610b3957610b39610a32565b81604052828152886020848701011115610b5257600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b60018060a01b038416815260006020848184015260606040840152835180606085015260005b81811015610bb657858101830151858201608001528201610b9a565b81811115610bc8576000608083870101525b50601f01601f19169290920160800195945050505050565b600060208284031215610bf257600080fd5b81518015158114610aa957600080fd5b600060208284031215610c1457600080fd5b8151610aa981610a48565b6000816000190483118215151615610c4757634e487b7160e01b600052601160045260246000fd5b50029056fea26469706673582212206076d947aed954f529b60be2b696a17b4cc1c260b4a641f638870e057f20800264736f6c634300080f0033