ETH Price: $3,178.56 (+0.56%)
Gas: 0.06 Gwei

Contract

0xBF7111F13386d23cb2Fba5A538107A73f6872bCF
 

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
Deny206687722024-09-03 8:11:47439 days ago1725351107IN
0xBF7111F1...3f6872bCF
0 ETH0.00002280.97926007
Rely206687712024-09-03 8:11:35439 days ago1725351095IN
0xBF7111F1...3f6872bCF
0 ETH0.000045990.9718768

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
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:
Splitter

Compiler Version
v0.8.21+commit.d9974bed

Optimization Enabled:
Yes with 200 runs

Other Settings:
paris EvmVersion
// SPDX-FileCopyrightText: © 2023 Dai Foundation <www.daifoundation.org>
// SPDX-License-Identifier: AGPL-3.0-or-later
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with this program.  If not, see <http://www.gnu.org/licenses/>.

pragma solidity ^0.8.21;

interface VatLike {
    function move(address, address, uint256) external;
    function hope(address) external;
}

interface UsdsJoinLike {
    function vat() external view returns (address);
    function exit(address, uint256) external;
}

interface FlapLike {
    function exec(uint256) external;
    function cage() external;
}

interface FarmLike {
    function notifyRewardAmount(uint256 reward) external;
}

contract Splitter {
    mapping (address => uint256) public wards;
    uint256     public           live;    // Active Flag
    FlapLike    public           flapper; // Underlying burner strategy
    FarmLike    public           farm;    // StakingRewards contract receiving the rewards
    uint256     public           burn;    // [WAD]       Burn percentage. 1 WAD = funneling 100% to the burn engine
    uint256     public           hop;     // [Seconds]   Time between kicks
    uint256     public           zzz;     // [Timestamp] Last kick

    VatLike      public immutable vat;
    UsdsJoinLike public immutable usdsJoin;

    event Rely(address indexed usr);
    event Deny(address indexed usr);
    event File(bytes32 indexed what, uint256 data);
    event File(bytes32 indexed what, address data);
    event Kick(uint256 tot, uint256 lot, uint256 pay);
    event Cage(uint256 rad);

    constructor(
        address _usdsJoin
    ) {
        usdsJoin = UsdsJoinLike(_usdsJoin);
        vat      = VatLike(usdsJoin.vat());
        
        vat.hope(_usdsJoin);
        
        hop = 1 hours; // Initial value for safety

        wards[msg.sender] = 1;
        emit Rely(msg.sender);

        live = 1;
    }

    modifier auth {
        require(wards[msg.sender] == 1, "Splitter/not-authorized");
        _;
    }

    uint256 internal constant RAY = 10 ** 27;
    uint256 internal constant RAD = 10 ** 45;

    function rely(address usr) external auth { wards[usr] = 1; emit Rely(usr); }
    function deny(address usr) external auth { wards[usr] = 0; emit Deny(usr); }

    function file(bytes32 what, uint256 data) external auth {
        if      (what == "burn") burn = data;
        else if (what == "hop")  hop  = data;
        else revert("Splitter/file-unrecognized-param");
        emit File(what, data);
    }

    function file(bytes32 what, address data) external auth {
        if      (what == "flapper") flapper = FlapLike(data);
        else if (what == "farm")    farm    = FarmLike(data);
        else revert("Splitter/file-unrecognized-param");
        emit File(what, data);
    }

    function kick(uint256 tot, uint256) external auth returns (uint256) {
        require(live == 1, "Splitter/not-live");

        require(block.timestamp >= zzz + hop, "Splitter/kicked-too-soon");
        zzz = block.timestamp;

        vat.move(msg.sender, address(this), tot);

        uint256 lot = tot * burn / RAD;
        if (lot > 0) {
            UsdsJoinLike(usdsJoin).exit(address(flapper), lot);
            flapper.exec(lot);
        }

        uint256 pay = (tot / RAY - lot);
        if (pay > 0) {
            UsdsJoinLike(usdsJoin).exit(address(farm), pay);
            farm.notifyRewardAmount(pay);
        }

        emit Kick(tot, lot, pay);
        return 0;
    }

    function cage(uint256) external auth {
        live = 0;
        emit Cage(0);
    }
}

Settings
{
  "remappings": [
    "dss-interfaces/=lib/dss-test/lib/dss-interfaces/src/",
    "dss-test/=lib/dss-test/src/",
    "forge-std/=lib/dss-test/lib/forge-std/src/"
  ],
  "optimizer": {
    "enabled": true,
    "runs": 200
  },
  "metadata": {
    "useLiteralContent": false,
    "bytecodeHash": "ipfs",
    "appendCBOR": true
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "evmVersion": "paris",
  "viaIR": false,
  "libraries": {}
}

Contract Security Audit

Contract ABI

API
[{"inputs":[{"internalType":"address","name":"_usdsJoin","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"rad","type":"uint256"}],"name":"Cage","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"usr","type":"address"}],"name":"Deny","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"what","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"data","type":"uint256"}],"name":"File","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"what","type":"bytes32"},{"indexed":false,"internalType":"address","name":"data","type":"address"}],"name":"File","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tot","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"lot","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"pay","type":"uint256"}],"name":"Kick","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"usr","type":"address"}],"name":"Rely","type":"event"},{"inputs":[],"name":"burn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"cage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"usr","type":"address"}],"name":"deny","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"farm","outputs":[{"internalType":"contract FarmLike","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"what","type":"bytes32"},{"internalType":"uint256","name":"data","type":"uint256"}],"name":"file","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"what","type":"bytes32"},{"internalType":"address","name":"data","type":"address"}],"name":"file","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"flapper","outputs":[{"internalType":"contract FlapLike","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"hop","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tot","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"kick","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"live","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"usr","type":"address"}],"name":"rely","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"usdsJoin","outputs":[{"internalType":"contract UsdsJoinLike","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"vat","outputs":[{"internalType":"contract VatLike","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"wards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"zzz","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]

60c060405234801561001057600080fd5b50604051610c67380380610c6783398101604081905261002f91610147565b6001600160a01b03811660a0819052604080516336569e7760e01b815290516336569e77916004808201926020929091908290030181865afa158015610079573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061009d9190610147565b6001600160a01b0390811660808190526040516328ec8bf160e21b815291831660048301529063a3b22fc490602401600060405180830381600087803b1580156100e657600080fd5b505af11580156100fa573d6000803e3d6000fd5b5050610e1060055550503360008181526020819052604080822060019055517fdd0e34038ac38b2a1ce960229778ac48a8719bc900b6c4f8d0475c6e8b385a609190a25060018055610177565b60006020828403121561015957600080fd5b81516001600160a01b038116811461017057600080fd5b9392505050565b60805160a051610ab66101b16000396000818161022f0152818161064e015261075f015260008181610114015261058b0152610ab66000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c80639c52a7f111610097578063bf353dbb11610066578063bf353dbb146101e4578063ca40c41914610204578063d4e8be8314610217578063fa1e2e861461022a57600080fd5b80639c52a7f1146101ac578063a2f91af2146101bf578063a4dff0a2146101d2578063b0b8579b146101db57600080fd5b806344df8e70116100d357806344df8e70146101665780635ca0d7231461017d57806365fae35e14610190578063957aa58c146101a357600080fd5b806329ae8114146100fa57806336569e771461010f57806336e9332d14610153575b600080fd5b61010d61010836600461092f565b610251565b005b6101367f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b600354610136906001600160a01b031681565b61016f60045481565b60405190815260200161014a565b600254610136906001600160a01b031681565b61010d61019e36600461096d565b61033e565b61016f60015481565b61010d6101ba36600461096d565b6103b2565b61010d6101cd36600461098f565b610425565b61016f60065481565b61016f60055481565b61016f6101f236600461096d565b60006020819052908152604090205481565b61016f61021236600461092f565b610491565b61010d6102253660046109a8565b61086a565b6101367f000000000000000000000000000000000000000000000000000000000000000081565b336000908152602081905260409020546001146102895760405162461bcd60e51b8152600401610280906109d4565b60405180910390fd5b8163313ab93760e11b036102a1576004819055610300565b81620686f760ec1b036102b8576005819055610300565b60405162461bcd60e51b815260206004820181905260248201527f53706c69747465722f66696c652d756e7265636f676e697a65642d706172616d6044820152606401610280565b817fe986e40cc8c151830d4f61050f4fb2e4add8567caad2d5f5496f9158e91fe4c78260405161033291815260200190565b60405180910390a25050565b3360009081526020819052604090205460011461036d5760405162461bcd60e51b8152600401610280906109d4565b6001600160a01b03811660008181526020819052604080822060019055517fdd0e34038ac38b2a1ce960229778ac48a8719bc900b6c4f8d0475c6e8b385a609190a250565b336000908152602081905260409020546001146103e15760405162461bcd60e51b8152600401610280906109d4565b6001600160a01b038116600081815260208190526040808220829055517f184450df2e323acec0ed3b5c7531b81f9b4cdef7914dfd4c0a4317416bb5251b9190a250565b336000908152602081905260409020546001146104545760405162461bcd60e51b8152600401610280906109d4565b600060018190556040519081527f8b2f35c645f75532175a00d9b4565154e45c8eb57ee0155e03d0958f3a4d4b899060200160405180910390a150565b336000908152602081905260408120546001146104c05760405162461bcd60e51b8152600401610280906109d4565b6001546001146105065760405162461bcd60e51b815260206004820152601160248201527053706c69747465722f6e6f742d6c69766560781b6044820152606401610280565b6005546006546105169190610a21565b4210156105655760405162461bcd60e51b815260206004820152601860248201527f53706c69747465722f6b69636b65642d746f6f2d736f6f6e00000000000000006044820152606401610280565b4260065560405163bb35783b60e01b8152336004820152306024820152604481018490527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063bb35783b90606401600060405180830381600087803b1580156105d757600080fd5b505af11580156105eb573d6000803e3d6000fd5b505050506000722cd76fe086b93ce2f768a00b22a00000000000600454856106139190610a34565b61061d9190610a4b565b9050801561070b5760025460405163ef693bed60e01b81526001600160a01b039182166004820152602481018390527f00000000000000000000000000000000000000000000000000000000000000009091169063ef693bed90604401600060405180830381600087803b15801561069457600080fd5b505af11580156106a8573d6000803e3d6000fd5b505060025460405163f873cb9160e01b8152600481018590526001600160a01b03909116925063f873cb919150602401600060405180830381600087803b1580156106f257600080fd5b505af1158015610706573d6000803e3d6000fd5b505050505b6000816107246b033b2e3c9fd0803ce800000087610a4b565b61072e9190610a6d565b9050801561081c5760035460405163ef693bed60e01b81526001600160a01b039182166004820152602481018390527f00000000000000000000000000000000000000000000000000000000000000009091169063ef693bed90604401600060405180830381600087803b1580156107a557600080fd5b505af11580156107b9573d6000803e3d6000fd5b5050600354604051633c6b16ab60e01b8152600481018590526001600160a01b039091169250633c6b16ab9150602401600060405180830381600087803b15801561080357600080fd5b505af1158015610817573d6000803e3d6000fd5b505050505b60408051868152602081018490529081018290527fe6dde59cbc017becba89714a037778d234a84ce7f0a137487142a007e580d6099060600160405180910390a16000925050505b92915050565b336000908152602081905260409020546001146108995760405162461bcd60e51b8152600401610280906109d4565b8166333630b83832b960c91b036108ca57600280546001600160a01b0319166001600160a01b0383161790556108f4565b81636661726d60e01b036102b857600380546001600160a01b0319166001600160a01b0383161790555b6040516001600160a01b038216815282907f8fef588b5fc1afbf5b2f06c1a435d513f208da2e6704c3d8f0e0ec91167066ba90602001610332565b6000806040838503121561094257600080fd5b50508035926020909101359150565b80356001600160a01b038116811461096857600080fd5b919050565b60006020828403121561097f57600080fd5b61098882610951565b9392505050565b6000602082840312156109a157600080fd5b5035919050565b600080604083850312156109bb57600080fd5b823591506109cb60208401610951565b90509250929050565b60208082526017908201527f53706c69747465722f6e6f742d617574686f72697a6564000000000000000000604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8082018082111561086457610864610a0b565b808202811582820484141761086457610864610a0b565b600082610a6857634e487b7160e01b600052601260045260246000fd5b500490565b8181038181111561086457610864610a0b56fea2646970667358221220a1b5b278ec17148af316b5b4c7b1fc61c018a873fa279c36faaa6e0a6a69e96a64736f6c634300081500330000000000000000000000003c0f895007ca717aa01c8693e59df1e8c3777feb

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106100f55760003560e01c80639c52a7f111610097578063bf353dbb11610066578063bf353dbb146101e4578063ca40c41914610204578063d4e8be8314610217578063fa1e2e861461022a57600080fd5b80639c52a7f1146101ac578063a2f91af2146101bf578063a4dff0a2146101d2578063b0b8579b146101db57600080fd5b806344df8e70116100d357806344df8e70146101665780635ca0d7231461017d57806365fae35e14610190578063957aa58c146101a357600080fd5b806329ae8114146100fa57806336569e771461010f57806336e9332d14610153575b600080fd5b61010d61010836600461092f565b610251565b005b6101367f00000000000000000000000035d1b3f3d7966a1dfe207aa4514c12a259a0492b81565b6040516001600160a01b0390911681526020015b60405180910390f35b600354610136906001600160a01b031681565b61016f60045481565b60405190815260200161014a565b600254610136906001600160a01b031681565b61010d61019e36600461096d565b61033e565b61016f60015481565b61010d6101ba36600461096d565b6103b2565b61010d6101cd36600461098f565b610425565b61016f60065481565b61016f60055481565b61016f6101f236600461096d565b60006020819052908152604090205481565b61016f61021236600461092f565b610491565b61010d6102253660046109a8565b61086a565b6101367f0000000000000000000000003c0f895007ca717aa01c8693e59df1e8c3777feb81565b336000908152602081905260409020546001146102895760405162461bcd60e51b8152600401610280906109d4565b60405180910390fd5b8163313ab93760e11b036102a1576004819055610300565b81620686f760ec1b036102b8576005819055610300565b60405162461bcd60e51b815260206004820181905260248201527f53706c69747465722f66696c652d756e7265636f676e697a65642d706172616d6044820152606401610280565b817fe986e40cc8c151830d4f61050f4fb2e4add8567caad2d5f5496f9158e91fe4c78260405161033291815260200190565b60405180910390a25050565b3360009081526020819052604090205460011461036d5760405162461bcd60e51b8152600401610280906109d4565b6001600160a01b03811660008181526020819052604080822060019055517fdd0e34038ac38b2a1ce960229778ac48a8719bc900b6c4f8d0475c6e8b385a609190a250565b336000908152602081905260409020546001146103e15760405162461bcd60e51b8152600401610280906109d4565b6001600160a01b038116600081815260208190526040808220829055517f184450df2e323acec0ed3b5c7531b81f9b4cdef7914dfd4c0a4317416bb5251b9190a250565b336000908152602081905260409020546001146104545760405162461bcd60e51b8152600401610280906109d4565b600060018190556040519081527f8b2f35c645f75532175a00d9b4565154e45c8eb57ee0155e03d0958f3a4d4b899060200160405180910390a150565b336000908152602081905260408120546001146104c05760405162461bcd60e51b8152600401610280906109d4565b6001546001146105065760405162461bcd60e51b815260206004820152601160248201527053706c69747465722f6e6f742d6c69766560781b6044820152606401610280565b6005546006546105169190610a21565b4210156105655760405162461bcd60e51b815260206004820152601860248201527f53706c69747465722f6b69636b65642d746f6f2d736f6f6e00000000000000006044820152606401610280565b4260065560405163bb35783b60e01b8152336004820152306024820152604481018490527f00000000000000000000000035d1b3f3d7966a1dfe207aa4514c12a259a0492b6001600160a01b03169063bb35783b90606401600060405180830381600087803b1580156105d757600080fd5b505af11580156105eb573d6000803e3d6000fd5b505050506000722cd76fe086b93ce2f768a00b22a00000000000600454856106139190610a34565b61061d9190610a4b565b9050801561070b5760025460405163ef693bed60e01b81526001600160a01b039182166004820152602481018390527f0000000000000000000000003c0f895007ca717aa01c8693e59df1e8c3777feb9091169063ef693bed90604401600060405180830381600087803b15801561069457600080fd5b505af11580156106a8573d6000803e3d6000fd5b505060025460405163f873cb9160e01b8152600481018590526001600160a01b03909116925063f873cb919150602401600060405180830381600087803b1580156106f257600080fd5b505af1158015610706573d6000803e3d6000fd5b505050505b6000816107246b033b2e3c9fd0803ce800000087610a4b565b61072e9190610a6d565b9050801561081c5760035460405163ef693bed60e01b81526001600160a01b039182166004820152602481018390527f0000000000000000000000003c0f895007ca717aa01c8693e59df1e8c3777feb9091169063ef693bed90604401600060405180830381600087803b1580156107a557600080fd5b505af11580156107b9573d6000803e3d6000fd5b5050600354604051633c6b16ab60e01b8152600481018590526001600160a01b039091169250633c6b16ab9150602401600060405180830381600087803b15801561080357600080fd5b505af1158015610817573d6000803e3d6000fd5b505050505b60408051868152602081018490529081018290527fe6dde59cbc017becba89714a037778d234a84ce7f0a137487142a007e580d6099060600160405180910390a16000925050505b92915050565b336000908152602081905260409020546001146108995760405162461bcd60e51b8152600401610280906109d4565b8166333630b83832b960c91b036108ca57600280546001600160a01b0319166001600160a01b0383161790556108f4565b81636661726d60e01b036102b857600380546001600160a01b0319166001600160a01b0383161790555b6040516001600160a01b038216815282907f8fef588b5fc1afbf5b2f06c1a435d513f208da2e6704c3d8f0e0ec91167066ba90602001610332565b6000806040838503121561094257600080fd5b50508035926020909101359150565b80356001600160a01b038116811461096857600080fd5b919050565b60006020828403121561097f57600080fd5b61098882610951565b9392505050565b6000602082840312156109a157600080fd5b5035919050565b600080604083850312156109bb57600080fd5b823591506109cb60208401610951565b90509250929050565b60208082526017908201527f53706c69747465722f6e6f742d617574686f72697a6564000000000000000000604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8082018082111561086457610864610a0b565b808202811582820484141761086457610864610a0b565b600082610a6857634e487b7160e01b600052601260045260246000fd5b500490565b8181038181111561086457610864610a0b56fea2646970667358221220a1b5b278ec17148af316b5b4c7b1fc61c018a873fa279c36faaa6e0a6a69e96a64736f6c63430008150033

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

0000000000000000000000003c0f895007ca717aa01c8693e59df1e8c3777feb

-----Decoded View---------------
Arg [0] : _usdsJoin (address): 0x3C0f895007CA717Aa01c8693e59DF1e8C3777FEB

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000003c0f895007ca717aa01c8693e59df1e8c3777feb


Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]

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.