Source Code
Overview
ETH Balance
0 ETH
Eth Value
$0.00Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
XDaiBridgePeripheralForUsdsPreUsdsUpgrade
Compiler Version
v0.8.25+commit.b61c2a91
Optimization Enabled:
Yes with 10 runs
Other Settings:
cancun EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
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);
}
}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);
}{
"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
- No Contract Security Audit Submitted- Submit Audit Here
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"}]Contract Creation Code
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
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 34 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
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.