账户
0x9f...f1c1
0x9F...f1c1

0x9F...f1c1

$500
此合同的源代码已经过验证!
合同元数据
编译器
0.6.7+commit.b8d736ae
语言
Solidity
合同源代码
文件 1 的 1:InternalCoinRelayer.sol
pragma solidity 0.6.7;

abstract contract SAFEEngineLike {
    function transferInternalCoins(address,address,uint256) virtual external;
    function coinBalance(address) virtual public view returns (uint256);
}
abstract contract SystemCoinLike {
    function balanceOf(address) virtual public view returns (uint256);
}
abstract contract CoinJoinLike {
    function systemCoin() virtual public view returns (address);
    function join(address, uint256) virtual external;
}

contract InternalCoinRelayer {
    // --- Params ---
    address         public targetAddress;

    SAFEEngineLike  public safeEngine;
    SystemCoinLike  public systemCoin;
    CoinJoinLike    public coinJoin;

    constructor(address targetAddress_, address safeEngine_, address coinJoin_) public {
        require(targetAddress_ != address(0), "InternalCoinRelayer/null-target");
        require(safeEngine_ != address(0), "InternalCoinRelayer/null-safe-engine");
        require(coinJoin_ != address(0), "InternalCoinRelayer/null-coin-join");

        targetAddress = targetAddress_;
        safeEngine    = SAFEEngineLike(safeEngine_);
        coinJoin      = CoinJoinLike(coinJoin_);
        systemCoin    = SystemCoinLike(coinJoin.systemCoin());
    }

    /**
     * @notice Join all ERC20 system coins that the contract has inside the SAFEEngine
     */
    function joinAllCoins() internal {
        if (systemCoin.balanceOf(address(this)) > 0) {
          coinJoin.join(address(this), systemCoin.balanceOf(address(this)));
        }
    }

    /**
     * @notice Transfer coins to an address
     * @param rad Amount of internal system coins to transfer (a number with 45 decimals)
     */
    function giveFunds(uint256 rad) external {
        require(targetAddress != address(0), "InternalCoinRelayer/null-target");

        joinAllCoins();
        require(safeEngine.coinBalance(address(this)) >= rad, "InternalCoinRelayer/not-enough-funds");

        safeEngine.transferInternalCoins(address(this), targetAddress, rad);
    }
}
设置
{
  "compilationTarget": {
    "InternalCoinRelayer.sol": "InternalCoinRelayer"
  },
  "evmVersion": "istanbul",
  "libraries": {},
  "metadata": {
    "bytecodeHash": "ipfs"
  },
  "optimizer": {
    "enabled": false,
    "runs": 0
  },
  "remappings": []
}
ABI
[{"inputs":[{"internalType":"address","name":"targetAddress_","type":"address"},{"internalType":"address","name":"safeEngine_","type":"address"},{"internalType":"address","name":"coinJoin_","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"coinJoin","outputs":[{"internalType":"contract CoinJoinLike","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rad","type":"uint256"}],"name":"giveFunds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"safeEngine","outputs":[{"internalType":"contract SAFEEngineLike","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"systemCoin","outputs":[{"internalType":"contract SystemCoinLike","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"targetAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}]