ETH Price: $1,987.36 (-3.00%)

Contract

0x27d9AD987BdE08a0d083ef7e0e4043C857A17B38
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

More Info

Private Name Tags

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Adjust246050662026-03-07 10:46:111 hr ago1772880371IN
0x27d9AD98...857A17B38
0 ETH0.000004390.06936008
Adjust246050522026-03-07 10:43:231 hr ago1772880203IN
0x27d9AD98...857A17B38
0 ETH0.000004970.06957278
Adjust246045422026-03-07 9:00:353 hrs ago1772874035IN
0x27d9AD98...857A17B38
0 ETH0.000002830.03869773
Adjust246041512026-03-07 7:42:114 hrs ago1772869331IN
0x27d9AD98...857A17B38
0 ETH0.000082150.9645
Adjust246016882026-03-06 23:25:5913 hrs ago1772839559IN
0x27d9AD98...857A17B38
0 ETH0.000002110.0410399
Adjust246012382026-03-06 21:55:2314 hrs ago1772834123IN
0x27d9AD98...857A17B38
0 ETH0.000001120.04160637
Adjust246012332026-03-06 21:54:2314 hrs ago1772834063IN
0x27d9AD98...857A17B38
0 ETH0.000002860.03903213
Adjust246001922026-03-06 18:25:3518 hrs ago1772821535IN
0x27d9AD98...857A17B38
0 ETH0.000153692.09736267
Adjust245994642026-03-06 15:58:5920 hrs ago1772812739IN
0x27d9AD98...857A17B38
0 ETH0.000201352.44516567
Adjust245991112026-03-06 14:47:4721 hrs ago1772808467IN
0x27d9AD98...857A17B38
0 ETH0.00002850.38874885
Adjust245989752026-03-06 14:20:3522 hrs ago1772806835IN
0x27d9AD98...857A17B38
0 ETH0.000037370.50987668
Adjust245985062026-03-06 12:46:3523 hrs ago1772801195IN
0x27d9AD98...857A17B38
0 ETH0.000008740.12219174
Adjust245977712026-03-06 10:18:2326 hrs ago1772792303IN
0x27d9AD98...857A17B38
0 ETH0.000005270.10231178
Adjust245976802026-03-06 9:59:5926 hrs ago1772791199IN
0x27d9AD98...857A17B38
0 ETH0.000004610.06298108
Adjust245970592026-03-06 7:54:4728 hrs ago1772783687IN
0x27d9AD98...857A17B38
0 ETH0.000149022.03368862
Refresh My Balan...245961342026-03-06 4:47:3531 hrs ago1772772455IN
0x27d9AD98...857A17B38
0 ETH0.000002080.03237436
Adjust245957172026-03-06 3:23:3533 hrs ago1772767415IN
0x27d9AD98...857A17B38
0 ETH0.000003150.04301703
Adjust245937242026-03-05 20:40:4739 hrs ago1772743247IN
0x27d9AD98...857A17B38
0 ETH0.000006760.07942136
Adjust245931172026-03-05 18:39:2341 hrs ago1772735963IN
0x27d9AD98...857A17B38
0 ETH0.000006760.09237331
Save245925732026-03-05 16:50:1143 hrs ago1772729411IN
0x27d9AD98...857A17B38
0 ETH0.000012490.16811813
Adjust245921052026-03-05 15:15:4745 hrs ago1772723747IN
0x27d9AD98...857A17B38
0 ETH0.000030220.41228651
Adjust245915302026-03-05 13:20:3547 hrs ago1772716835IN
0x27d9AD98...857A17B38
0 ETH0.000013460.18818703
Adjust245907362026-03-05 10:41:352 days ago1772707295IN
0x27d9AD98...857A17B38
0 ETH0.000013930.1900457
Adjust245904972026-03-05 9:53:352 days ago1772704415IN
0x27d9AD98...857A17B38
0 ETH0.000006440.09007411
Adjust245901162026-03-05 8:37:112 days ago1772699831IN
0x27d9AD98...857A17B38
0 ETH0.000005030.06872296
View all transactions

View more zero value Internal Transactions in Advanced View mode

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

Compiler Version
v0.8.24+commit.e11b9ed9

Optimization Enabled:
Yes with 200 runs

Other Settings:
paris EvmVersion
File 1 of 9 : Savings.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

import "../stablecoin/IFrankencoin.sol";
import "../rate/Leadrate.sol";
import "./AbstractSavings.sol";

/**
 * @title Savings
 *
 * Module to enable savings based on a Leadrate ("Leitzins") module on mainnet.
 */
contract Savings is Leadrate, AbstractSavings {

    constructor(IFrankencoin zchf_, uint24 initialRatePPM) AbstractSavings(zchf_) Leadrate(zchf_.reserve(), initialRatePPM) {
    }

}

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

interface IGovernance {
   function checkQualified(address sender, address[] calldata helpers) external view;
}

struct SyncVote {
    address voter;
    uint256 votes;
    address delegatee;
}

struct SyncMessage {
    SyncVote[] votes;
    uint256 totalVotes;
}

/**
 * SPDX-License-Identifier: MIT
 *
 * Copyright (c) 2016-2019 zOS Global Limited
 *
 */
pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP. Does not include
 * the optional functions; to access them see `ERC20Detailed`.
 */

interface IERC20 {
    function name() external view returns (string memory);

    function symbol() external view returns (string memory);

    function decimals() external view returns (uint8);

    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns always true. Throws error on failure.
     *
     * Emits a `Transfer` event.
     */
    function transfer(address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through `transferFrom`. This is
     * zero by default.
     *
     * This value can change when `approve` or `transferFrom` are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * > Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an `Approval` event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns always true. Throws error on failure.
     *
     * Emits a `Transfer` event.
     */
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to `approve`. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

import "../erc20/IERC20.sol";
import "../stablecoin/IFrankencoin.sol";

interface IPosition {

    function initialize(address parent, uint40 _expiration) external;

    function hub() external view returns(address);

    function original() external view returns (address);

    function collateral() external view returns (IERC20);

    function minimumCollateral() external view returns (uint256);

    function challengePeriod() external view returns (uint40);

    function expiration() external view returns (uint40);

    function price() external view returns (uint256);

    function deny(address[] calldata helpers, string calldata message) external;

    function mint(address target, uint256 amount) external;

    function repay(uint256 amount) external returns (uint256);

    function adjust(uint256 newMinted, uint256 newCollateral, uint256 newPrice) external;

    function minted() external view returns (uint256);

    function availableForMinting() external view returns (uint256);

    function reserveContribution() external view returns (uint24);

    function withdrawCollateral(address target, uint256 amount) external;

    function getUsableMint(uint256 totalMint, bool beforeFees) external view returns (uint256);

    function getMintAmount(uint256 usableMint) external view returns (uint256);

    function challengeData() external view returns (uint256 liqPrice, uint40 phase);

    function notifyChallengeStarted(uint256 size) external;

    function notifyChallengeAverted(uint256 size) external;

    function notifyChallengeSucceeded(address _bidder, uint256 _size) external returns (address, uint256, uint256, uint32);

    function forceSale(address buyer, uint256 collAmount, uint256 proceeds) external;

}

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

import "../erc20/IERC20.sol";
import "../stablecoin/IFrankencoin.sol";
import "../minting/IPosition.sol";

/**
 * @title Leadrate (attempt at translating the nicely concise German term 'Leitzins')
 *
 * A module that can provide other modules with the lead interest rate for the system.
 * 
 * This is an abstract module that is agnostic about the way the lead rate is updated.
 *
 **/
abstract contract AbstractLeadrate {

    // the following five variables are less than 256 bit so they should be stored
    // in the same slot, making them cheap to access together, right?

    uint24 public currentRatePPM; // 24 bit allows rates of up to 1670% per year

    uint40 private anchorTime; // 40 bits for time in seconds spans up to 1000 human generations
    uint64 private ticksAnchor; // in bips * seconds, uint88 allows up to

    event RateChanged(uint24 newRate);

    constructor(uint24 initialRatePPM) {
        currentRatePPM = initialRatePPM;
        anchorTime = uint40(block.timestamp);
        ticksAnchor = 0;
        emit RateChanged(initialRatePPM); // emit for init indexing, if wanted
    }

    /**
     * Setting a previously proposed interest rate change into force.
     */
    function updateRate(uint24 rate) internal {
        uint40 timeNow = uint40(block.timestamp);
        ticksAnchor += (timeNow - anchorTime) * currentRatePPM;
        anchorTime = timeNow;
        currentRatePPM = rate;
        emit RateChanged(rate);
    }

    /**
     * Total accumulated 'interest ticks' since this contract was deployed.
     * One 'tick' is a ppm-second, so one months of 12% annual interest is
     *   120000*30*24*3600 = 311040000000 ticks.
     * Two months of 6% annual interest would result in the same number of
     * ticks. For simplicity, this is linear, so there is no "interest on interest".
     */
    function currentTicks() public view returns (uint64) {
        return ticks(block.timestamp);
    }

    function ticks(uint256 timestamp) public view returns (uint64) {
        return ticksAnchor + (uint64(timestamp) - anchorTime) * currentRatePPM;
    }

}

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

import "../erc20/IERC20.sol";
import "../stablecoin/IFrankencoin.sol";
import "../minting/IPosition.sol";
import "../equity/IGovernance.sol";
import "./AbstractLeadrate.sol";

/**
 * @title Leadrate (attempt at translating the nicely concise German term 'Leitzins')
 *
 * A module that can provide other modules with the lead interest rate for the system.
 *
 **/
contract Leadrate is AbstractLeadrate {

    IGovernance public immutable equity;

    // the following five variables are less than 256 bit so they should be stored
    // in the same slot, making them cheap to access together, right?

    uint24 public nextRatePPM;
    uint40 public nextChange;

    event RateProposed(address who, uint24 nextRate, uint40 nextChange);
    error NoPendingChange();
    error ChangeNotReady();

    constructor(IGovernance equity_, uint24 initialRatePPM) AbstractLeadrate(initialRatePPM) {
        equity = equity_;
        nextRatePPM = initialRatePPM;
        nextChange = uint40(block.timestamp);
    }

    /**
     * Proposes a new interest rate that will automatically be applied after seven days.
     * To cancel a proposal, just overwrite it with a new one proposing the current rate.
     */
    function proposeChange(uint24 newRatePPM_, address[] calldata helpers) external {
        equity.checkQualified(msg.sender, helpers);
        nextRatePPM = newRatePPM_;
        nextChange = uint40(block.timestamp + 7 days);
        emit RateProposed(msg.sender, nextRatePPM, nextChange);
    }

    /**
     * Setting a previously proposed interest rate change into force.
     */
    function applyChange() external {
        if (currentRatePPM == nextRatePPM) revert NoPendingChange();
        uint40 timeNow = uint40(block.timestamp);
        if (timeNow < nextChange) revert ChangeNotReady();
        super.updateRate(nextRatePPM);
    }

}

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

import "../stablecoin/IFrankencoin.sol";
import "../rate/AbstractLeadrate.sol";

/**
 * @title Savings
 *
 * Module to enable savings based on a Leadrate ("Leitzins") module.
 *
 * As the interest rate changes, the speed at which 'ticks' are accumulated is
 * adjusted. The ticks counter serves as the basis for calculating the interest
 * due for the individual accoutns.
 *
 * The saved ZCHF are subject to a lockup of up to 3 days and only start to yield
 * an interest after the lockup ended. The purpose of this lockup is to discourage
 * short-term holdings and to avoid paying interest to transactional accounts.
 * Transactional accounts typically do not need an incentive to hold Frankencoins.
 */
abstract contract AbstractSavings is AbstractLeadrate {
    
    uint64 public immutable INTEREST_DELAY = uint64(3 days);

    IFrankencoin public immutable ZCHF;

    mapping(address => Account) public savings;

    struct Account {
        uint192 saved;
        uint64 ticks;
        address referrer;
        uint32 referralFeePPM;
    }

    event Saved(address indexed account , uint192 amount);
    event InterestCollected(address indexed account, uint256 interest, uint256 referrerFee);
    event Withdrawn(address indexed account, uint192 amount);

    error FundsLocked(uint40 remainingSeconds);

    // The module is considered disabled if the interest is zero or about to become zero within three days.
    error ModuleDisabled();

    error ReferralFeeTooHigh(uint32 fee);

    constructor(IFrankencoin zchf){
        ZCHF = zchf;
    }

    /**
     * Shortcut for refreshBalance(msg.sender)
     */
    function refreshMyBalance() public returns (uint192) {
        return refreshBalance(msg.sender);
    }

    /**
     * Collects the accrued interest and adds it to the account.
     *
     * It can be beneficial to do so every now and then in order to start collecting
     * interest on the accrued interest.
     */
    function refreshBalance(address owner) public returns (uint192) {
        return refresh(owner).saved;
    }

    function refresh(address accountOwner) internal returns (Account storage) {
        Account storage account = savings[accountOwner];
        uint64 ticks = currentTicks();
        if (ticks > account.ticks) {
            uint192 earnedInterest = calculateInterest(account, ticks);
            if (earnedInterest > 0) {
                // collect interest as you go and trigger accounting event
                ZCHF.coverLoss(address(this), earnedInterest);
                uint192 referralFee = deductTransferReferralFee(account, earnedInterest);
                account.saved += (earnedInterest - referralFee);
                emit InterestCollected(accountOwner, earnedInterest, referralFee);
            }
            account.ticks = ticks;
        }
        return account;
    }

    function accruedInterest(address accountOwner) public view returns (uint192) {
        return accruedInterest(accountOwner, block.timestamp);
    }

    function accruedInterest(address accountOwner, uint256 timestamp) public view returns (uint192) {
        Account memory account = savings[accountOwner];
        return calculateInterest(account, ticks(timestamp));
    }

    function calculateInterest(Account memory account, uint64 ticks) public pure returns (uint192) {
        if (ticks <= account.ticks || account.ticks == 0) {
            return 0;
        } else {
            return uint192((uint256(ticks - account.ticks) * account.saved) / 1000000 / 365 days);
        }
    }
    
    /**
     * Save 'amount'.
     */
    function save(uint192 amount) public {
        save(msg.sender, amount);
    }

    function adjust(uint192 targetAmount) public {
        Account storage balance = refresh(msg.sender);
        if (balance.saved < targetAmount) {
            save(targetAmount - balance.saved);
        } else if (balance.saved > targetAmount) {
            withdraw(msg.sender, balance.saved - targetAmount);
        }
    }

    /**
     * Send 'amount' to the account of the provided owner.
     * The funds sent to the account are locked for a while, depending on how much already is in there.
     */
    function save(address owner, uint192 amount) public {
        if (currentRatePPM == 0) revert ModuleDisabled();
       // if (nextRatePPM == 0 && (nextChange <= block.timestamp + INTEREST_DELAY)) revert ModuleDisabled(); TODO: figure out why this was in there
        Account storage balance = refresh(owner);
        ZCHF.transferFrom(msg.sender, address(this), amount);
        uint64 ticks = currentTicks();
        assert(balance.ticks >= ticks);
        uint256 saved = balance.saved;
        uint64 weightedAverage = uint64(
            (saved * (balance.ticks - ticks) + uint256(amount) * currentRatePPM * INTEREST_DELAY) / (saved + amount)
        );
        balance.saved += amount;
        balance.ticks = ticks + weightedAverage;
        emit Saved(owner, amount);
    }

    /**
     * Withdraw up to 'amount' to the target address.
     * When trying to withdraw more than available, all that is available is withdrawn.
     * Returns the acutally transferred amount.
     */
    function withdraw(address target, uint192 amount) public returns (uint256) {
        Account storage account = refresh(msg.sender);
        if (amount >= account.saved) {
            amount = account.saved;
            delete savings[msg.sender];
        } else {
            account.saved -= amount;
        }
        ZCHF.transfer(target, amount);
        emit Withdrawn(msg.sender, amount);
        return amount;
    }

    /**
     * REFERRAL LOGIC
     * 
     * The following functions can be used by a frontend or wallet contains functions to
     * access the savings features of the Frankencoin system. It allows the frontend or
     * wallet to set a referrer and a referral fee when calling save or adjust, but not
     * when withdrawing. The referral fee can be up to 25% (250'000 ppm). It is deducted
     * from the collected interest.
     * 
     * The user can drop or change the referrer at any time, so the fee is not very sticky.
     * The magnitude of the fee that can be charged mainly depends on how convenient the
     * frontend or wallet is in comparison to the user directly interfering with the system
     * himself. So economically, it really is a frontend fee that can only be charged to
     * the extent that the frontend provides a more convenient way of interaction with the
     * protocol and the users are willing to pay for that convenience.
     */

    /**
     * Save the given amount and set the referrer to earn a fee on the collected interest.
     * 
     * Referral fee is given in parts per million and can be at most 250'000, which is 25%.
     */
    function save(uint192 amount, address referrer, uint24 referralFeePPM) public {
        save(msg.sender, amount);
        setReferrer(referrer, referralFeePPM);
    }

    /**
     * Withdraw the given amount and set the referrer to earn a fee on the collected interest.
     * 
     * Referral fee is given in parts per million and can be at most 250'000, which is 25%.
     */
    function withdraw(uint192 amount, address referrer, uint24 referralFeePPM) public {
        withdraw(msg.sender, amount);
        setReferrer(referrer, referralFeePPM);
    }

    /**
     * Adjust to the given amount and set the referrer to earn a fee on the collected interest.
     * 
     * Referral fee is given in parts per million and can be at most 250'000, which is 25%.
     */
    function adjust(uint192 targetAmount, address referrer, uint24 referralFeePPM) public {
        adjust(targetAmount);
        setReferrer(referrer, referralFeePPM);
    }

    /**
     * Remove the referrer.
     */
    function dropReferrer() public {
        refresh(msg.sender); // pay accrued referral fee before dropping referrer
        setReferrer(address(0x0), 0);
    }

    function setReferrer(address referrer, uint32 referralFeePPM) internal {
        if (referralFeePPM > 250_000) revert ReferralFeeTooHigh(referralFeePPM); // don't allow more than 25%
        savings[msg.sender].referrer = referrer;
        savings[msg.sender].referralFeePPM = referralFeePPM;
    }

    function deductTransferReferralFee(Account memory balance, uint192 earnedInterest) internal returns (uint192) {
        if (balance.referrer != address(0x0)){
            uint256 referralFee = uint256(earnedInterest) * balance.referralFeePPM / 1000000;
            ZCHF.transfer(balance.referrer, referralFee);
            return uint192(referralFee);
        } else {
            return 0;
        }
    }

}

interface IInterestSource {
    function coverLoss(address source, uint256 amount) external;
}

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

import "../erc20/IERC20.sol";
import "../equity/IGovernance.sol";

interface IBasicFrankencoin is IERC20 {
    function MIN_FEE() external view returns (uint256);

    function MIN_APPLICATION_PERIOD() external view returns (uint256);

    function suggestMinter(
        address _minter,
        uint256 _applicationPeriod,
        uint256 _applicationFee,
        string calldata _message
    ) external;

    function registerPosition(address position) external;

    function denyMinter(address minter, address[] calldata helpers, string calldata message) external;

    function reserve() external view returns (IGovernance);

    function isMinter(address minter) external view returns (bool);

    function getPositionParent(address position) external view returns (address);

    function mint(address target, uint256 amount) external;

    function burnFrom(address target, uint256 amount) external;

    function burn(uint256 amount) external;

    function coverLoss(address source, uint256 amount) external;

    function collectProfits(address source, uint256 _amount) external;
}

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

import "../equity/IGovernance.sol";
import "./IBasicFrankencoin.sol";

interface IFrankencoin is IBasicFrankencoin {

    function minterReserve() external view returns (uint256);

    function calculateAssignedReserve(uint256 mintedAmount, uint32 _reservePPM) external view returns (uint256);

    function calculateFreedAmount(uint256 amountExcludingReserve, uint32 reservePPM) external view returns (uint256);

    function equity() external view returns (uint256);

    function mintWithReserve(address target, uint256 amount, uint32 reservePPM, uint32 feePPM) external;

    function burnWithoutReserve(uint256 amountIncludingReserve, uint32 reservePPM) external;

    function burnFromWithReserve(address payer, uint256 targetTotalBurnAmount, uint32 _reservePPM) external returns (uint256);

    function burnWithReserve(uint256 amountExcludingReserve, uint32 reservePPM) external returns (uint256);

}

Settings
{
  "optimizer": {
    "enabled": true,
    "runs": 200
  },
  "evmVersion": "paris",
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "metadata": {
    "useLiteralContent": true
  }
}

Contract Security Audit

Contract ABI

API
[{"inputs":[{"internalType":"contract IFrankencoin","name":"zchf_","type":"address"},{"internalType":"uint24","name":"initialRatePPM","type":"uint24"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ChangeNotReady","type":"error"},{"inputs":[{"internalType":"uint40","name":"remainingSeconds","type":"uint40"}],"name":"FundsLocked","type":"error"},{"inputs":[],"name":"ModuleDisabled","type":"error"},{"inputs":[],"name":"NoPendingChange","type":"error"},{"inputs":[{"internalType":"uint32","name":"fee","type":"uint32"}],"name":"ReferralFeeTooHigh","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"interest","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"referrerFee","type":"uint256"}],"name":"InterestCollected","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint24","name":"newRate","type":"uint24"}],"name":"RateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"who","type":"address"},{"indexed":false,"internalType":"uint24","name":"nextRate","type":"uint24"},{"indexed":false,"internalType":"uint40","name":"nextChange","type":"uint40"}],"name":"RateProposed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint192","name":"amount","type":"uint192"}],"name":"Saved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint192","name":"amount","type":"uint192"}],"name":"Withdrawn","type":"event"},{"inputs":[],"name":"INTEREST_DELAY","outputs":[{"internalType":"uint64","name":"","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ZCHF","outputs":[{"internalType":"contract IFrankencoin","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"accountOwner","type":"address"}],"name":"accruedInterest","outputs":[{"internalType":"uint192","name":"","type":"uint192"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"accountOwner","type":"address"},{"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"accruedInterest","outputs":[{"internalType":"uint192","name":"","type":"uint192"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint192","name":"targetAmount","type":"uint192"},{"internalType":"address","name":"referrer","type":"address"},{"internalType":"uint24","name":"referralFeePPM","type":"uint24"}],"name":"adjust","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint192","name":"targetAmount","type":"uint192"}],"name":"adjust","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"applyChange","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"uint192","name":"saved","type":"uint192"},{"internalType":"uint64","name":"ticks","type":"uint64"},{"internalType":"address","name":"referrer","type":"address"},{"internalType":"uint32","name":"referralFeePPM","type":"uint32"}],"internalType":"struct AbstractSavings.Account","name":"account","type":"tuple"},{"internalType":"uint64","name":"ticks","type":"uint64"}],"name":"calculateInterest","outputs":[{"internalType":"uint192","name":"","type":"uint192"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"currentRatePPM","outputs":[{"internalType":"uint24","name":"","type":"uint24"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentTicks","outputs":[{"internalType":"uint64","name":"","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dropReferrer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"equity","outputs":[{"internalType":"contract IGovernance","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nextChange","outputs":[{"internalType":"uint40","name":"","type":"uint40"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nextRatePPM","outputs":[{"internalType":"uint24","name":"","type":"uint24"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint24","name":"newRatePPM_","type":"uint24"},{"internalType":"address[]","name":"helpers","type":"address[]"}],"name":"proposeChange","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"refreshBalance","outputs":[{"internalType":"uint192","name":"","type":"uint192"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"refreshMyBalance","outputs":[{"internalType":"uint192","name":"","type":"uint192"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint192","name":"amount","type":"uint192"}],"name":"save","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint192","name":"amount","type":"uint192"}],"name":"save","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint192","name":"amount","type":"uint192"},{"internalType":"address","name":"referrer","type":"address"},{"internalType":"uint24","name":"referralFeePPM","type":"uint24"}],"name":"save","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"savings","outputs":[{"internalType":"uint192","name":"saved","type":"uint192"},{"internalType":"uint64","name":"ticks","type":"uint64"},{"internalType":"address","name":"referrer","type":"address"},{"internalType":"uint32","name":"referralFeePPM","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"ticks","outputs":[{"internalType":"uint64","name":"","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"uint192","name":"amount","type":"uint192"}],"name":"withdraw","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint192","name":"amount","type":"uint192"},{"internalType":"address","name":"referrer","type":"address"},{"internalType":"uint24","name":"referralFeePPM","type":"uint24"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60e06040526203f48060a0523480156200001857600080fd5b5060405162001820380380620018208339810160408190526200003b9162000186565b81826001600160a01b031663cd3293de6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200007b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000a19190620001cc565b6000805462ffffff85166001600160401b0319909116811763010000004264ffffffffff160217600160401b600160801b031916909155604051908152839081907fd76dfbd4c35cffe2a846b6488bc677c511aa4337e1551f3a360427ac7a78de7b9060200160405180910390a1506001600160a01b0391821660805260008054600160801b600160c01b031916600160801b62ffffff939093169290920264ffffffffff60981b191691909117600160981b4264ffffffffff16021790551660c05250620001f39050565b6001600160a01b03811681146200018357600080fd5b50565b600080604083850312156200019a57600080fd5b8251620001a7816200016d565b602084015190925062ffffff81168114620001c157600080fd5b809150509250929050565b600060208284031215620001df57600080fd5b8151620001ec816200016d565b9392505050565b60805160a05160c0516115d36200024d600039600081816101ab0152818161051701528181610a2a01528181610d5201526110b40152600081816102b60152610afb01526000818161036901526105ed01526115d36000f3fe608060405234801561001057600080fd5b50600436106101585760003560e01c806385bd12d1116100c3578063b77cd1c71161007c578063b77cd1c7146103e7578063bdc65152146103fa578063c19836101461040d578063e89c596f14610420578063fd449c1414610428578063fe4f20f51461043b57600080fd5b806385bd12d11461035c57806391a0ac6a14610364578063a696399d1461038b578063a944a94f1461039e578063b079f163146103b1578063b6f83c17146103b957600080fd5b80634df61d82116101155780634df61d82146102b15780634e65037e146102f0578063534cb30d146102f8578063656d16c61461030b578063708af4d11461033657806377267ec31461034957600080fd5b806306a7b3761461015d5780631791dc5e146101855780631836e0da146101a65780631de252e4146101e55780631f7cdd5f146101fa5780632e4b20ab1461029b575b600080fd5b60005461016c9062ffffff1681565b60405162ffffff90911681526020015b60405180910390f35b610198610193366004611164565b61044e565b60405190815260200161017c565b6101cd7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161017c565b6101f86101f33660046111aa565b6105d6565b005b61025561020836600461122f565b600160208190526000918252604090912080549101546001600160c01b03821691600160c01b90046001600160401b0316906001600160a01b03811690600160a01b900463ffffffff1684565b604080516001600160c01b0390951685526001600160401b0390931660208501526001600160a01b039091169183019190915263ffffffff16606082015260800161017c565b60005461016c90600160801b900462ffffff1681565b6102d87f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160401b03909116815260200161017c565b6101f86106fb565b6102d8610306366004611251565b61077d565b61031e610319366004611295565b6107cc565b6040516001600160c01b03909116815260200161017c565b6101f8610344366004611337565b610860565b61031e61035736600461122f565b61087f565b61031e61088b565b6101cd7f000000000000000000000000000000000000000000000000000000000000000081565b61031e61039936600461137a565b61089b565b6101f86103ac366004611337565b61091b565b6102d8610933565b6000546103d190600160981b900464ffffffffff1681565b60405164ffffffffff909116815260200161017c565b61031e6103f536600461122f565b61093e565b6101f86104083660046113a4565b610959565b6101f861041b366004611164565b6109ca565b6101f8610c4e565b6101f86104363660046113a4565b610c65565b6101f8610449366004611337565b610c6f565b60008061045a33610c79565b80549091506001600160c01b03908116908416106104a757805433600090815260016020819052604082209182550180546001600160c01b03191690556001600160c01b031692506104e9565b8054839082906000906104c49084906001600160c01b03166113d5565b92506101000a8154816001600160c01b0302191690836001600160c01b031602179055505b60405163a9059cbb60e01b81526001600160a01b0385811660048301526001600160c01b03851660248301527f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303816000875af1158015610560573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061058491906113f5565b506040516001600160c01b038416815233907f47cf194f5e559cca0413017d38814a7843cc6f3052bc43c8085938774ae581519060200160405180910390a250506001600160c01b0381165b92915050565b60405163352e3a8360e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063352e3a839061062690339086908690600401611417565b60006040518083038186803b15801561063e57600080fd5b505afa158015610652573d6000803e3d6000fd5b50506000805462ffffff60801b1916600160801b62ffffff8816021790555061068090504262093a80611471565b6000805464ffffffffff60981b1916600160981b64ffffffffff9384168102919091179182905560408051338152600160801b840462ffffff16602082015291909204909216908201527e4964f2e48bd8a460fb41883098593956d335f36fdded4ca9cbac9252d72b2f9060600160405180910390a1505050565b60005462ffffff600160801b8204811691160361072b5760405163147fde5f60e31b815260040160405180910390fd5b600054429064ffffffffff600160981b90910481169082161015610762576040516301b3782160e21b815260040160405180910390fd5b60005461077a90600160801b900462ffffff16610ee5565b50565b6000805462ffffff8116906107a0906301000000900464ffffffffff1684611484565b6107aa91906114a4565b6000546105d091906801000000000000000090046001600160401b03166114cf565b600082602001516001600160401b0316826001600160401b03161115806107fe575060208301516001600160401b0316155b1561080b575060006105d0565b6301e13380620f424084600001516001600160c01b03168560200151856108329190611484565b6001600160401b031661084591906114ef565b61084f9190611506565b6108599190611506565b90506105d0565b61086a338461044e565b5061087a828262ffffff16610fc8565b505050565b60006105d0824261089b565b60006108963361093e565b905090565b6001600160a01b038281166000908152600160208181526040808420815160808101835281546001600160c01b0381168252600160c01b90046001600160401b0316938101939093529092015493841691810191909152600160a01b90920463ffffffff16606083015290610913816103198561077d565b949350505050565b61092483610959565b61087a828262ffffff16610fc8565b60006108964261077d565b600061094982610c79565b546001600160c01b031692915050565b600061096433610c79565b80549091506001600160c01b038084169116101561099957805461099590610436906001600160c01b0316846113d5565b5050565b80546001600160c01b038084169116111561099557805461087a9033906101939085906001600160c01b03166113d5565b6000805462ffffff1690036109f257604051630dbfe5fd60e31b815260040160405180910390fd5b60006109fd83610c79565b6040516323b872dd60e01b81523360048201523060248201526001600160c01b03841660448201529091507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906323b872dd906064016020604051808303816000875af1158015610a7b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a9f91906113f5565b506000610aaa610933565b82549091506001600160401b03808316600160c01b909204161015610ad157610ad1611528565b81546001600160c01b0390811690600090610aee90861683611471565b6000546001600160401b037f00000000000000000000000000000000000000000000000000000000000000001690610b349062ffffff166001600160c01b0389166114ef565b610b3e91906114ef565b8554610b5b908690600160c01b90046001600160401b0316611484565b610b6e906001600160401b0316856114ef565b610b789190611471565b610b829190611506565b845490915085908590600090610ba29084906001600160c01b031661153e565b92506101000a8154816001600160c01b0302191690836001600160c01b031602179055508083610bd291906114cf565b84546001600160401b0391909116600160c01b026001600160c01b039091161784556040516001600160a01b038716907ff195ce54b48d5147da31c1fc525c8828b8836088b505a329e5de2b35da6731e290610c3e9088906001600160c01b0391909116815260200190565b60405180910390a2505050505050565b610c5733610c79565b50610c63600080610fc8565b565b61077a33826109ca565b61092433846109ca565b6001600160a01b038116600090815260016020526040812081610c9a610933565b82549091506001600160401b03600160c01b90910481169082161115610ede576040805160808101825283546001600160c01b0381168252600160c01b90046001600160401b0316602082015260018401546001600160a01b03811692820192909252600160a01b90910463ffffffff166060820152600090610d1d90836107cc565b90506001600160c01b03811615610ebe57604051631a3f4bd360e31b81523060048201526001600160c01b03821660248201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063d1fa5e9890604401600060405180830381600087803b158015610d9e57600080fd5b505af1158015610db2573d6000803e3d6000fd5b50506040805160808101825286546001600160c01b0381168252600160c01b90046001600160401b0316602082015260018701546001600160a01b03811692820192909252600160a01b90910463ffffffff16606082015260009250610e19915083611041565b9050610e2581836113d5565b84548590600090610e409084906001600160c01b031661153e565b92506101000a8154816001600160c01b0302191690836001600160c01b03160217905550856001600160a01b03167f9bbd517758fbae61197f1c1c04c8614064e89512dbaf4350dcdf76fcaa5e21618383604051610eb49291906001600160c01b0392831681529116602082015260400190565b60405180910390a2505b5081546001600160c01b0316600160c01b6001600160401b038316021782555b5092915050565b600054429062ffffff811690610f09906301000000900464ffffffffff168361155e565b610f13919061157c565b64ffffffffff16600060088282829054906101000a90046001600160401b0316610f3d91906114cf565b82546101009290920a6001600160401b03818102199093169190921691909102179055506000805467ffffffffffffffff1916630100000064ffffffffff84160262ffffff19161762ffffff84169081179091556040519081527fd76dfbd4c35cffe2a846b6488bc677c511aa4337e1551f3a360427ac7a78de7b9060200160405180910390a15050565b6203d0908163ffffffff161115610ffe57604051639acdd88960e01b815263ffffffff8216600482015260240160405180910390fd5b33600090815260016020819052604090912001805463ffffffff909216600160a01b026001600160c01b03199092166001600160a01b0390931692909217179055565b60408201516000906001600160a01b031615611129576000620f4240846060015163ffffffff16846001600160c01b031661107c91906114ef565b6110869190611506565b604085810151905163a9059cbb60e01b81526001600160a01b039182166004820152602481018390529192507f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303816000875af11580156110fd573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061112191906113f5565b5090506105d0565b5060006105d0565b80356001600160a01b038116811461114857600080fd5b919050565b80356001600160c01b038116811461114857600080fd5b6000806040838503121561117757600080fd5b61118083611131565b915061118e6020840161114d565b90509250929050565b803562ffffff8116811461114857600080fd5b6000806000604084860312156111bf57600080fd5b6111c884611197565b925060208401356001600160401b03808211156111e457600080fd5b818601915086601f8301126111f857600080fd5b81358181111561120757600080fd5b8760208260051b850101111561121c57600080fd5b6020830194508093505050509250925092565b60006020828403121561124157600080fd5b61124a82611131565b9392505050565b60006020828403121561126357600080fd5b5035919050565b80356001600160401b038116811461114857600080fd5b803563ffffffff8116811461114857600080fd5b60008082840360a08112156112a957600080fd5b60808112156112b757600080fd5b50604051608081018181106001600160401b03821117156112e857634e487b7160e01b600052604160045260246000fd5b6040526112f48461114d565b81526113026020850161126a565b602082015261131360408501611131565b604082015261132460608501611281565b6060820152915061118e6080840161126a565b60008060006060848603121561134c57600080fd5b6113558461114d565b925061136360208501611131565b915061137160408501611197565b90509250925092565b6000806040838503121561138d57600080fd5b61139683611131565b946020939093013593505050565b6000602082840312156113b657600080fd5b61124a8261114d565b634e487b7160e01b600052601160045260246000fd5b6001600160c01b03828116828216039080821115610ede57610ede6113bf565b60006020828403121561140757600080fd5b8151801515811461124a57600080fd5b6001600160a01b03848116825260406020808401829052908301849052600091859160608501845b87811015611464578361145186611131565b168252938201939082019060010161143f565b5098975050505050505050565b808201808211156105d0576105d06113bf565b6001600160401b03828116828216039080821115610ede57610ede6113bf565b6001600160401b038181168382160280821691908281146114c7576114c76113bf565b505092915050565b6001600160401b03818116838216019080821115610ede57610ede6113bf565b80820281158282048414176105d0576105d06113bf565b60008261152357634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052600160045260246000fd5b6001600160c01b03818116838216019080821115610ede57610ede6113bf565b64ffffffffff828116828216039080821115610ede57610ede6113bf565b64ffffffffff8181168382160280821691908281146114c7576114c76113bf56fea26469706673582212200c9059aaa44bfc56b0a69b00d7191803e4a5d80284961996ce7749d4af25319464736f6c63430008180033000000000000000000000000b58e61c3098d85632df34eecfb899a1ed80921cb0000000000000000000000000000000000000000000000000000000000007530

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101585760003560e01c806385bd12d1116100c3578063b77cd1c71161007c578063b77cd1c7146103e7578063bdc65152146103fa578063c19836101461040d578063e89c596f14610420578063fd449c1414610428578063fe4f20f51461043b57600080fd5b806385bd12d11461035c57806391a0ac6a14610364578063a696399d1461038b578063a944a94f1461039e578063b079f163146103b1578063b6f83c17146103b957600080fd5b80634df61d82116101155780634df61d82146102b15780634e65037e146102f0578063534cb30d146102f8578063656d16c61461030b578063708af4d11461033657806377267ec31461034957600080fd5b806306a7b3761461015d5780631791dc5e146101855780631836e0da146101a65780631de252e4146101e55780631f7cdd5f146101fa5780632e4b20ab1461029b575b600080fd5b60005461016c9062ffffff1681565b60405162ffffff90911681526020015b60405180910390f35b610198610193366004611164565b61044e565b60405190815260200161017c565b6101cd7f000000000000000000000000b58e61c3098d85632df34eecfb899a1ed80921cb81565b6040516001600160a01b03909116815260200161017c565b6101f86101f33660046111aa565b6105d6565b005b61025561020836600461122f565b600160208190526000918252604090912080549101546001600160c01b03821691600160c01b90046001600160401b0316906001600160a01b03811690600160a01b900463ffffffff1684565b604080516001600160c01b0390951685526001600160401b0390931660208501526001600160a01b039091169183019190915263ffffffff16606082015260800161017c565b60005461016c90600160801b900462ffffff1681565b6102d87f000000000000000000000000000000000000000000000000000000000003f48081565b6040516001600160401b03909116815260200161017c565b6101f86106fb565b6102d8610306366004611251565b61077d565b61031e610319366004611295565b6107cc565b6040516001600160c01b03909116815260200161017c565b6101f8610344366004611337565b610860565b61031e61035736600461122f565b61087f565b61031e61088b565b6101cd7f0000000000000000000000001ba26788dfde592fec8bcb0eaff472a42be341b281565b61031e61039936600461137a565b61089b565b6101f86103ac366004611337565b61091b565b6102d8610933565b6000546103d190600160981b900464ffffffffff1681565b60405164ffffffffff909116815260200161017c565b61031e6103f536600461122f565b61093e565b6101f86104083660046113a4565b610959565b6101f861041b366004611164565b6109ca565b6101f8610c4e565b6101f86104363660046113a4565b610c65565b6101f8610449366004611337565b610c6f565b60008061045a33610c79565b80549091506001600160c01b03908116908416106104a757805433600090815260016020819052604082209182550180546001600160c01b03191690556001600160c01b031692506104e9565b8054839082906000906104c49084906001600160c01b03166113d5565b92506101000a8154816001600160c01b0302191690836001600160c01b031602179055505b60405163a9059cbb60e01b81526001600160a01b0385811660048301526001600160c01b03851660248301527f000000000000000000000000b58e61c3098d85632df34eecfb899a1ed80921cb169063a9059cbb906044016020604051808303816000875af1158015610560573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061058491906113f5565b506040516001600160c01b038416815233907f47cf194f5e559cca0413017d38814a7843cc6f3052bc43c8085938774ae581519060200160405180910390a250506001600160c01b0381165b92915050565b60405163352e3a8360e01b81526001600160a01b037f0000000000000000000000001ba26788dfde592fec8bcb0eaff472a42be341b2169063352e3a839061062690339086908690600401611417565b60006040518083038186803b15801561063e57600080fd5b505afa158015610652573d6000803e3d6000fd5b50506000805462ffffff60801b1916600160801b62ffffff8816021790555061068090504262093a80611471565b6000805464ffffffffff60981b1916600160981b64ffffffffff9384168102919091179182905560408051338152600160801b840462ffffff16602082015291909204909216908201527e4964f2e48bd8a460fb41883098593956d335f36fdded4ca9cbac9252d72b2f9060600160405180910390a1505050565b60005462ffffff600160801b8204811691160361072b5760405163147fde5f60e31b815260040160405180910390fd5b600054429064ffffffffff600160981b90910481169082161015610762576040516301b3782160e21b815260040160405180910390fd5b60005461077a90600160801b900462ffffff16610ee5565b50565b6000805462ffffff8116906107a0906301000000900464ffffffffff1684611484565b6107aa91906114a4565b6000546105d091906801000000000000000090046001600160401b03166114cf565b600082602001516001600160401b0316826001600160401b03161115806107fe575060208301516001600160401b0316155b1561080b575060006105d0565b6301e13380620f424084600001516001600160c01b03168560200151856108329190611484565b6001600160401b031661084591906114ef565b61084f9190611506565b6108599190611506565b90506105d0565b61086a338461044e565b5061087a828262ffffff16610fc8565b505050565b60006105d0824261089b565b60006108963361093e565b905090565b6001600160a01b038281166000908152600160208181526040808420815160808101835281546001600160c01b0381168252600160c01b90046001600160401b0316938101939093529092015493841691810191909152600160a01b90920463ffffffff16606083015290610913816103198561077d565b949350505050565b61092483610959565b61087a828262ffffff16610fc8565b60006108964261077d565b600061094982610c79565b546001600160c01b031692915050565b600061096433610c79565b80549091506001600160c01b038084169116101561099957805461099590610436906001600160c01b0316846113d5565b5050565b80546001600160c01b038084169116111561099557805461087a9033906101939085906001600160c01b03166113d5565b6000805462ffffff1690036109f257604051630dbfe5fd60e31b815260040160405180910390fd5b60006109fd83610c79565b6040516323b872dd60e01b81523360048201523060248201526001600160c01b03841660448201529091507f000000000000000000000000b58e61c3098d85632df34eecfb899a1ed80921cb6001600160a01b0316906323b872dd906064016020604051808303816000875af1158015610a7b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a9f91906113f5565b506000610aaa610933565b82549091506001600160401b03808316600160c01b909204161015610ad157610ad1611528565b81546001600160c01b0390811690600090610aee90861683611471565b6000546001600160401b037f000000000000000000000000000000000000000000000000000000000003f4801690610b349062ffffff166001600160c01b0389166114ef565b610b3e91906114ef565b8554610b5b908690600160c01b90046001600160401b0316611484565b610b6e906001600160401b0316856114ef565b610b789190611471565b610b829190611506565b845490915085908590600090610ba29084906001600160c01b031661153e565b92506101000a8154816001600160c01b0302191690836001600160c01b031602179055508083610bd291906114cf565b84546001600160401b0391909116600160c01b026001600160c01b039091161784556040516001600160a01b038716907ff195ce54b48d5147da31c1fc525c8828b8836088b505a329e5de2b35da6731e290610c3e9088906001600160c01b0391909116815260200190565b60405180910390a2505050505050565b610c5733610c79565b50610c63600080610fc8565b565b61077a33826109ca565b61092433846109ca565b6001600160a01b038116600090815260016020526040812081610c9a610933565b82549091506001600160401b03600160c01b90910481169082161115610ede576040805160808101825283546001600160c01b0381168252600160c01b90046001600160401b0316602082015260018401546001600160a01b03811692820192909252600160a01b90910463ffffffff166060820152600090610d1d90836107cc565b90506001600160c01b03811615610ebe57604051631a3f4bd360e31b81523060048201526001600160c01b03821660248201527f000000000000000000000000b58e61c3098d85632df34eecfb899a1ed80921cb6001600160a01b03169063d1fa5e9890604401600060405180830381600087803b158015610d9e57600080fd5b505af1158015610db2573d6000803e3d6000fd5b50506040805160808101825286546001600160c01b0381168252600160c01b90046001600160401b0316602082015260018701546001600160a01b03811692820192909252600160a01b90910463ffffffff16606082015260009250610e19915083611041565b9050610e2581836113d5565b84548590600090610e409084906001600160c01b031661153e565b92506101000a8154816001600160c01b0302191690836001600160c01b03160217905550856001600160a01b03167f9bbd517758fbae61197f1c1c04c8614064e89512dbaf4350dcdf76fcaa5e21618383604051610eb49291906001600160c01b0392831681529116602082015260400190565b60405180910390a2505b5081546001600160c01b0316600160c01b6001600160401b038316021782555b5092915050565b600054429062ffffff811690610f09906301000000900464ffffffffff168361155e565b610f13919061157c565b64ffffffffff16600060088282829054906101000a90046001600160401b0316610f3d91906114cf565b82546101009290920a6001600160401b03818102199093169190921691909102179055506000805467ffffffffffffffff1916630100000064ffffffffff84160262ffffff19161762ffffff84169081179091556040519081527fd76dfbd4c35cffe2a846b6488bc677c511aa4337e1551f3a360427ac7a78de7b9060200160405180910390a15050565b6203d0908163ffffffff161115610ffe57604051639acdd88960e01b815263ffffffff8216600482015260240160405180910390fd5b33600090815260016020819052604090912001805463ffffffff909216600160a01b026001600160c01b03199092166001600160a01b0390931692909217179055565b60408201516000906001600160a01b031615611129576000620f4240846060015163ffffffff16846001600160c01b031661107c91906114ef565b6110869190611506565b604085810151905163a9059cbb60e01b81526001600160a01b039182166004820152602481018390529192507f000000000000000000000000b58e61c3098d85632df34eecfb899a1ed80921cb169063a9059cbb906044016020604051808303816000875af11580156110fd573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061112191906113f5565b5090506105d0565b5060006105d0565b80356001600160a01b038116811461114857600080fd5b919050565b80356001600160c01b038116811461114857600080fd5b6000806040838503121561117757600080fd5b61118083611131565b915061118e6020840161114d565b90509250929050565b803562ffffff8116811461114857600080fd5b6000806000604084860312156111bf57600080fd5b6111c884611197565b925060208401356001600160401b03808211156111e457600080fd5b818601915086601f8301126111f857600080fd5b81358181111561120757600080fd5b8760208260051b850101111561121c57600080fd5b6020830194508093505050509250925092565b60006020828403121561124157600080fd5b61124a82611131565b9392505050565b60006020828403121561126357600080fd5b5035919050565b80356001600160401b038116811461114857600080fd5b803563ffffffff8116811461114857600080fd5b60008082840360a08112156112a957600080fd5b60808112156112b757600080fd5b50604051608081018181106001600160401b03821117156112e857634e487b7160e01b600052604160045260246000fd5b6040526112f48461114d565b81526113026020850161126a565b602082015261131360408501611131565b604082015261132460608501611281565b6060820152915061118e6080840161126a565b60008060006060848603121561134c57600080fd5b6113558461114d565b925061136360208501611131565b915061137160408501611197565b90509250925092565b6000806040838503121561138d57600080fd5b61139683611131565b946020939093013593505050565b6000602082840312156113b657600080fd5b61124a8261114d565b634e487b7160e01b600052601160045260246000fd5b6001600160c01b03828116828216039080821115610ede57610ede6113bf565b60006020828403121561140757600080fd5b8151801515811461124a57600080fd5b6001600160a01b03848116825260406020808401829052908301849052600091859160608501845b87811015611464578361145186611131565b168252938201939082019060010161143f565b5098975050505050505050565b808201808211156105d0576105d06113bf565b6001600160401b03828116828216039080821115610ede57610ede6113bf565b6001600160401b038181168382160280821691908281146114c7576114c76113bf565b505092915050565b6001600160401b03818116838216019080821115610ede57610ede6113bf565b80820281158282048414176105d0576105d06113bf565b60008261152357634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052600160045260246000fd5b6001600160c01b03818116838216019080821115610ede57610ede6113bf565b64ffffffffff828116828216039080821115610ede57610ede6113bf565b64ffffffffff8181168382160280821691908281146114c7576114c76113bf56fea26469706673582212200c9059aaa44bfc56b0a69b00d7191803e4a5d80284961996ce7749d4af25319464736f6c63430008180033

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

000000000000000000000000b58e61c3098d85632df34eecfb899a1ed80921cb0000000000000000000000000000000000000000000000000000000000007530

-----Decoded View---------------
Arg [0] : zchf_ (address): 0xB58E61C3098d85632Df34EecfB899A1Ed80921cB
Arg [1] : initialRatePPM (uint24): 30000

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000b58e61c3098d85632df34eecfb899a1ed80921cb
Arg [1] : 0000000000000000000000000000000000000000000000000000000000007530


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.