ETH Price: $1,974.92 (+0.26%)
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

More Info

Private Name Tags

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To

There are no matching entries

Please try again later

Advanced mode:
Parent Transaction Hash Method Block
From
To
View All Internal Transactions
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
XDaiBridgePeripheralForUsdsPreUsdsUpgrade

Compiler Version
v0.8.25+commit.b61c2a91

Optimization Enabled:
Yes with 10 runs

Other Settings:
cancun EvmVersion
pragma solidity 0.8.25;

import {IXDaiForeignBridge} from "../../interfaces/IXDaiForeignBridge.sol";
import {IERC20} from "../../interfaces/IERC20.sol";

interface IDaiUsds {
    function daiToUsds(address usr, uint256 wad) external;
    function usdsToDai(address usr, uint256 wad) external;
}

/// @title XDaiBridgePeripheralForUsdsPreUsdsUpgrade
/// @author Gnosis Chain's bridge team
/// @notice This contract acts as a transitional contract between BridgeRouter and xDAIForeignBridge contract before xDAIForeignBridge is upgraded to USDS as default
///          The functions in this contract are compatible with the XDaiBridgePeripheral contract that is used after xDAIForeignBridge USDS upgrade
/// @dev This contract is non upgradeable and only callable by BridgeRouter contract
contract XDaiBridgePeripheralForUsdsPreUsdsUpgrade {
    address public router;
    address public constant DAIUSDS = 0x3225737a9Bbb6473CB4a45b7244ACa2BeFdB276A;
    address public constant FOREIGN_XDAIBRIDGE = 0x4aa42145Aa6Ebf72e164C9bBC74fbD3788045016;
    address public constant USDS = 0xdC035D45d973E3EC169d2276DDab16f1e407384F;
    address public constant DAI = 0x6B175474E89094C44Da98b954EedeAC495271d0F;

    modifier onlyRouter() {
        require(msg.sender == router, "only Router");
        _;
    }

    constructor(address _router) {
        router = _router;
    }

    /// @notice call approve & relayTokens after swapping USDS to DAI
    /// @dev only callable by BridgeRouter
    /// @param receiver receiver of the xDAI token on Gnosis Chain
    /// @param amount amount of xDAI token received
    function relayTokens(address receiver, uint256 amount) external onlyRouter {
        // user bridge USDS
        IERC20(USDS).transferFrom(msg.sender, address(this), amount);

        // swap Usds to Dai
        IERC20(USDS).approve(DAIUSDS, amount);
        IDaiUsds(DAIUSDS).usdsToDai(address(this), amount);

        // call XDaibridge relayTokens
        IERC20(DAI).approve(FOREIGN_XDAIBRIDGE, amount);
        IXDaiForeignBridge(FOREIGN_XDAIBRIDGE).relayTokens(receiver, amount);
    }
}

File 2 of 3 : IXDaiForeignBridge.sol
pragma solidity 0.8.25;

interface IXDaiForeignBridge {
    event DailyLimitChanged(uint256 newLimit);
    event ExecutionDailyLimitChanged(uint256 newLimit);
    event GasPriceChanged(uint256 gasPrice);
    event OwnershipTransferred(address previousOwner, address newOwner);
    event PaidInterest(address indexed token, address to, uint256 value);
    event RelayedMessage(address recipient, uint256 value, bytes32 transactionHash);
    event RequiredBlockConfirmationChanged(uint256 requiredBlockConfirmations);
    event UserRequestForAffirmation(address recipient, uint256 value);

    function claimTokens(address _token, address _to) external;
    function daiToken() external pure returns (address);
    function dailyLimit() external view returns (uint256);
    function decimalShift() external view returns (int256);
    function deployedAtBlock() external view returns (uint256);
    function disableInterest(address _token) external;
    function erc20token() external view returns (address);
    function executeSignatures(bytes memory message, bytes memory signatures) external;
    function executeSignaturesUSDS(bytes memory message, bytes memory signatures) external;
    function executeSignaturesGSN(bytes memory message, bytes memory signatures, uint256 maxTokensFee) external;
    function executionDailyLimit() external view returns (uint256);
    function executionMaxPerTx() external view returns (uint256);
    function gasPrice() external view returns (uint256);
    function getBridgeInterfacesVersion() external pure returns (uint64 major, uint64 minor, uint64 patch);
    function getBridgeMode() external pure returns (bytes4 _data);
    function getCurrentDay() external view returns (uint256);
    function getTrustedForwarder() external view returns (address);
    function initialize(
        address _validatorContract,
        address _erc20token,
        uint256 _requiredBlockConfirmations,
        uint256 _gasPrice,
        uint256[3] memory _dailyLimitMaxPerTxMinPerTxArray,
        uint256[2] memory _homeDailyLimitHomeMaxPerTxArray,
        address _owner,
        int256 _decimalShift,
        address _bridgeOnOtherSide
    ) external returns (bool);
    function initializeInterest(
        address _token,
        uint256 _minCashThreshold,
        uint256 _minInterestPaid,
        address _interestReceiver
    ) external;
    function swapSDAIToUSDS() external;
    function interestAmount(address _token) external view returns (uint256);
    function interestReceiver(address _token) external view returns (address);
    function invest(address _token) external;
    function investDai() external;
    function investedAmount(address _token) external view returns (uint256);
    function isInitialized() external view returns (bool);
    function isInterestEnabled(address _token) external view returns (bool);
    function isTrustedForwarder(address forwarder) external view returns (bool);
    function maxAvailablePerTx() external view returns (uint256);
    function maxPerTx() external view returns (uint256);
    function minCashThreshold(address _token) external view returns (uint256);
    function minInterestPaid(address _token) external view returns (uint256);
    function minPerTx() external view returns (uint256);
    function owner() external view returns (address);
    function payInterest(address _token, uint256 _amount) external;
    function previewWithdraw(address _token, uint256 _amount) external view returns (uint256);
    function refillBridge() external;
    function relayTokens(address _receiver, uint256 _amount) external;
    function relayedMessages(bytes32 _nonce) external view returns (bool);
    function requiredBlockConfirmations() external view returns (uint256);
    function requiredSignatures() external view returns (uint256);
    function sDaiToken() external pure returns (address);
    function setDailyLimit(uint256 _dailyLimit) external;
    function setExecutionDailyLimit(uint256 _dailyLimit) external;
    function setExecutionMaxPerTx(uint256 _maxPerTx) external;
    function setGasPrice(uint256 _gasPrice) external;
    function setInterestReceiver(address _token, address _receiver) external;
    function setMaxPerTx(uint256 _maxPerTx) external;
    function setMinCashThreshold(address _token, uint256 _minCashThreshold) external;
    function setMinInterestPaid(address _token, uint256 _minInterestPaid) external;
    function setMinPerTx(uint256 _minPerTx) external;
    function setPayMaster(address _paymaster) external;
    function setRequiredBlockConfirmations(uint256 _blockConfirmations) external;
    function setTrustedForwarder(address _trustedForwarder) external;
    function totalExecutedPerDay(uint256 _day) external view returns (uint256);
    function totalSpentPerDay(uint256 _day) external view returns (uint256);
    function transferOwnership(address newOwner) external;
    function validatorContract() external view returns (address);
    function versionRecipient() external view returns (string memory);
    function withinExecutionLimit(uint256 _amount) external view returns (bool);
    function withinLimit(uint256 _amount) external view returns (bool);
    function setNewErc20Token(address newDAI) external;
}

pragma solidity ^0.8.0;

interface IERC20 {
    function approve(address usr, uint256 wad) external;
    function allowance(address owner, address spender, uint256 amount) external returns (uint256);
    function permit(address owner, address spender, uint256 amount, uint256 deadline, bytes memory signatures) external;
    function transferFrom(address owner, address spender, uint256 amount) external;
    function transfer(address usr, uint256 wad) external;
    function balanceOf(address usr) external returns (uint256);
}

Settings
{
  "remappings": [
    "@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/",
    "@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/",
    "openzeppelin-solidity/=node_modules/openzeppelin-solidity/",
    "ds-test/=lib/forge-std/lib/ds-test/src/",
    "erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/",
    "forge-std/=lib/forge-std/src/",
    "halmos-cheatcodes/=lib/openzeppelin-contracts-upgradeable/lib/halmos-cheatcodes/src/",
    "openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/",
    "openzeppelin-contracts/=lib/openzeppelin-contracts/"
  ],
  "optimizer": {
    "enabled": true,
    "runs": 10
  },
  "metadata": {
    "useLiteralContent": false,
    "bytecodeHash": "ipfs",
    "appendCBOR": true
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "evmVersion": "cancun",
  "viaIR": false,
  "libraries": {}
}

Contract Security Audit

Contract ABI

API
[{"inputs":[{"internalType":"address","name":"_router","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"DAI","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DAIUSDS","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"FOREIGN_XDAIBRIDGE","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"USDS","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"relayTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}]

6080604052348015600e575f80fd5b50604051610497380380610497833981016040819052602b91604e565b5f80546001600160a01b0319166001600160a01b03929092169190911790556079565b5f60208284031215605d575f80fd5b81516001600160a01b03811681146072575f80fd5b9392505050565b610411806100865f395ff3fe608060405234801561000f575f80fd5b5060043610610060575f3560e01c806301e4f53a146100645780639ffddd6414610079578063c8ef95ae146100b0578063e08e1a70146100cb578063e0bab4c4146100e6578063f887ea4014610101575b5f80fd5b61007761007236600461038d565b610113565b005b610094733225737a9bbb6473cb4a45b7244aca2befdb276a81565b6040516001600160a01b03909116815260200160405180910390f35b61009473dc035d45d973e3ec169d2276ddab16f1e407384f81565b610094734aa42145aa6ebf72e164c9bbc74fbd378804501681565b610094736b175474e89094c44da98b954eedeac495271d0f81565b5f54610094906001600160a01b031681565b5f546001600160a01b0316331461015e5760405162461bcd60e51b815260206004820152600b60248201526a37b7363c902937baba32b960a91b604482015260640160405180910390fd5b6040516323b872dd60e01b81523360048201523060248201526044810182905273dc035d45d973e3ec169d2276ddab16f1e407384f906323b872dd906064015f604051808303815f87803b1580156101b4575f80fd5b505af11580156101c6573d5f803e3d5ffd5b505060405163095ea7b360e01b815273dc035d45d973e3ec169d2276ddab16f1e407384f925063095ea7b3915061021790733225737a9bbb6473cb4a45b7244aca2befdb276a9085906004016103c2565b5f604051808303815f87803b15801561022e575f80fd5b505af1158015610240573d5f803e3d5ffd5b505060405163068f301560e41b8152733225737a9bbb6473cb4a45b7244aca2befdb276a92506368f30150915061027d90309085906004016103c2565b5f604051808303815f87803b158015610294575f80fd5b505af11580156102a6573d5f803e3d5ffd5b505060405163095ea7b360e01b8152736b175474e89094c44da98b954eedeac495271d0f925063095ea7b391506102f790734aa42145aa6ebf72e164c9bbc74fbd37880450169085906004016103c2565b5f604051808303815f87803b15801561030e575f80fd5b505af1158015610320573d5f803e3d5ffd5b505060405162f27a9d60e11b8152734aa42145aa6ebf72e164c9bbc74fbd378804501692506301e4f53a915061035c90859085906004016103c2565b5f604051808303815f87803b158015610373575f80fd5b505af1158015610385573d5f803e3d5ffd5b505050505050565b5f806040838503121561039e575f80fd5b82356001600160a01b03811681146103b4575f80fd5b946020939093013593505050565b6001600160a01b0392909216825260208201526040019056fea2646970667358221220e1d9d574f6bec0866378fcafbc8ba5d2aacbd28380f2a9e757f4260e1c032c3a64736f6c6343000819003300000000000000000000000074b987a253864278ea4ae0cf0850e73c3a5bc4f8

Deployed Bytecode

0x608060405234801561000f575f80fd5b5060043610610060575f3560e01c806301e4f53a146100645780639ffddd6414610079578063c8ef95ae146100b0578063e08e1a70146100cb578063e0bab4c4146100e6578063f887ea4014610101575b5f80fd5b61007761007236600461038d565b610113565b005b610094733225737a9bbb6473cb4a45b7244aca2befdb276a81565b6040516001600160a01b03909116815260200160405180910390f35b61009473dc035d45d973e3ec169d2276ddab16f1e407384f81565b610094734aa42145aa6ebf72e164c9bbc74fbd378804501681565b610094736b175474e89094c44da98b954eedeac495271d0f81565b5f54610094906001600160a01b031681565b5f546001600160a01b0316331461015e5760405162461bcd60e51b815260206004820152600b60248201526a37b7363c902937baba32b960a91b604482015260640160405180910390fd5b6040516323b872dd60e01b81523360048201523060248201526044810182905273dc035d45d973e3ec169d2276ddab16f1e407384f906323b872dd906064015f604051808303815f87803b1580156101b4575f80fd5b505af11580156101c6573d5f803e3d5ffd5b505060405163095ea7b360e01b815273dc035d45d973e3ec169d2276ddab16f1e407384f925063095ea7b3915061021790733225737a9bbb6473cb4a45b7244aca2befdb276a9085906004016103c2565b5f604051808303815f87803b15801561022e575f80fd5b505af1158015610240573d5f803e3d5ffd5b505060405163068f301560e41b8152733225737a9bbb6473cb4a45b7244aca2befdb276a92506368f30150915061027d90309085906004016103c2565b5f604051808303815f87803b158015610294575f80fd5b505af11580156102a6573d5f803e3d5ffd5b505060405163095ea7b360e01b8152736b175474e89094c44da98b954eedeac495271d0f925063095ea7b391506102f790734aa42145aa6ebf72e164c9bbc74fbd37880450169085906004016103c2565b5f604051808303815f87803b15801561030e575f80fd5b505af1158015610320573d5f803e3d5ffd5b505060405162f27a9d60e11b8152734aa42145aa6ebf72e164c9bbc74fbd378804501692506301e4f53a915061035c90859085906004016103c2565b5f604051808303815f87803b158015610373575f80fd5b505af1158015610385573d5f803e3d5ffd5b505050505050565b5f806040838503121561039e575f80fd5b82356001600160a01b03811681146103b4575f80fd5b946020939093013593505050565b6001600160a01b0392909216825260208201526040019056fea2646970667358221220e1d9d574f6bec0866378fcafbc8ba5d2aacbd28380f2a9e757f4260e1c032c3a64736f6c63430008190033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

00000000000000000000000074b987a253864278ea4ae0cf0850e73c3a5bc4f8

-----Decoded View---------------
Arg [0] : _router (address): 0x74b987A253864278eA4Ae0cF0850E73C3A5bc4F8

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 00000000000000000000000074b987a253864278ea4ae0cf0850e73c3a5bc4f8


Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading
Loading...
Loading

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.