Contract 0x3Dcf399725e41455bAC7afe8a75815db4C06f54B 2

 
 
Txn Hash
Method
Block
From
To
Value
0xe2c64816713661a4de99158b0301b8b89a424a1ddcea9f691e020ac78d327a90Transfer144437392022-03-23 16:51:10249 days 2 hrs ago0xb462f15410da2f751bb24fa2494eb68f8be17c23 IN  0x3dcf399725e41455bac7afe8a75815db4c06f54b0.001 Ether0.00264853 33.50965592
0x17157e77b46a20c44f4cb575b7c7550d31d25158b8c5d0cb82aa63b9be9ec2caTransfer144427672022-03-23 13:13:38249 days 6 hrs ago0xb462f15410da2f751bb24fa2494eb68f8be17c23 IN  0x3dcf399725e41455bac7afe8a75815db4c06f54b0 Ether0.00975958 23.24082208
0xb50aed7a61e4d4b3d82c483b84d63a606a3ca1b96b5981aa24e0efb451d4e157Transfer143952342022-03-16 3:39:50256 days 16 hrs ago0xfd62d73a049a7becbd54d9f81db2747dcddac022 IN  0x3dcf399725e41455bac7afe8a75815db4c06f54b0.0001 Ether0.00078785 37.51696779
0x3275a1d5b277cdf654764e23966aa2866e341b5cb07f835a622020c70329f521Transfer143952302022-03-16 3:39:10256 days 16 hrs ago0xfd62d73a049a7becbd54d9f81db2747dcddac022 IN  0x3dcf399725e41455bac7afe8a75815db4c06f54b0.00001 Ether0.00064677 30.79869497
0xb962f6d646b539136fb9b7e123c572aaf5da5e7a1e701fbd15554f0e61c4bf01Transfer143520202022-03-09 10:24:56263 days 9 hrs ago0xfd62d73a049a7becbd54d9f81db2747dcddac022 IN  0x3dcf399725e41455bac7afe8a75815db4c06f54b0.0005 Ether0.00458256 18.10745391
0x33f9265a1a6490f0f681722808c239a816a182ab921e0d1ce9bdd1484bc28541Transfer143461672022-03-08 12:21:00264 days 7 hrs agoENS Name flensmann.eth IN  0x3dcf399725e41455bac7afe8a75815db4c06f54b1 wei0.00642973 15.30826412
0x27b2bda57eee013ecd4fb28393c178bd27f36113d06cc693c05342fe38b0302dTransfer143387742022-03-07 8:57:36265 days 10 hrs agoENS Name flensmann.eth IN  0x3dcf399725e41455bac7afe8a75815db4c06f54b1 wei0.00067384 32.08769139
0xaa014688ba328de89091c246cd08803f11f72eb5128a367b51da889b784419dbTransfer143281442022-03-05 17:10:11267 days 2 hrs ago0xb462f15410da2f751bb24fa2494eb68f8be17c23 IN  0x3dcf399725e41455bac7afe8a75815db4c06f54b0 Ether0.00207857 28.03389049
0x33cc87692f19ec678f29aef968a3e5dc9955938a3b4641db5e7d3cb5b8f8992cTransfer143193522022-03-04 8:26:06268 days 11 hrs ago0xb462f15410da2f751bb24fa2494eb68f8be17c23 IN  0x3dcf399725e41455bac7afe8a75815db4c06f54b0.015 Ether0.00399183 24.37523896
0xdb8fcce0b85f5526819a4810f71a1658d6c361f27955b8c0cad9121a9619dd3eTransfer143169562022-03-03 23:20:29268 days 20 hrs ago0xb6e358ebd074c1f642ee8e0285b4b8bc232644ac IN  0x3dcf399725e41455bac7afe8a75815db4c06f54b0.0001 Ether0.00370147 49.92207621
0x63b23688711739ea6db6266af8a7538cef3bc55def5c5640db315fc740249ea4Transfer143066032022-03-02 8:53:44270 days 10 hrs agoENS Name flensmann.eth IN  0x3dcf399725e41455bac7afe8a75815db4c06f54b0.037 Ether0.00626648 38.26490159
0xee78b8269e1f0161436fd9633d196e4b8f7d4960a164671bc1bfad8e7156e4e6Transfer143024782022-03-01 17:27:12271 days 2 hrs ago0xb6e358ebd074c1f642ee8e0285b4b8bc232644ac IN  0x3dcf399725e41455bac7afe8a75815db4c06f54b0.00682465 Ether0.01219384 74.45896482
0x3cd9cbbc46656a53599867ff18664a4d567b52b0e52b72524b6bb2f7af99c450Transfer142995802022-03-01 6:54:11271 days 12 hrs ago0xfd62d73a049a7becbd54d9f81db2747dcddac022 IN  0x3dcf399725e41455bac7afe8a75815db4c06f54b0.005 Ether0.01067367 38.44708473
0xb14b3f23e62cfd03e298e8372c7e3ebe81783688c6795211b08a315e0d34f25cTransfer142995502022-03-01 6:49:11271 days 12 hrs ago0xfd62d73a049a7becbd54d9f81db2747dcddac022 IN  0x3dcf399725e41455bac7afe8a75815db4c06f54b0.005 Ether0.02129744 72.94193587
0x2251aa1c19981a7581f1b3cd1643b28cbb7665d0e58332625067fe5aa889ed13Transfer142887842022-02-27 14:40:13273 days 5 hrs ago0x2e01a0a79da3c6d0e74369f91f5d66db531bcfd3 IN  0x3dcf399725e41455bac7afe8a75815db4c06f54b0.005 Ether0.01111206 32
0x1606ee4abece8a2b60b8898478225d3d28dc65b24aabbd6626c98e941f5096aaTransfer142617832022-02-23 10:23:07277 days 9 hrs ago0xfd62d73a049a7becbd54d9f81db2747dcddac022 IN  0x3dcf399725e41455bac7afe8a75815db4c06f54b0.02 Ether0.00800581 32.11755343
0x4ca49bb9d6f5bea27c63104ca533cc423e31fac68233354a28b58a8763237fed0x60c06040142273972022-02-18 2:25:44282 days 17 hrs ago0x2e01a0a79da3c6d0e74369f91f5d66db531bcfd3 IN  Create: Auction0 Ether0.058052640
[ Download CSV Export 
Latest 13 internal transactions
Parent Txn Hash Block From To Value
0xe2c64816713661a4de99158b0301b8b89a424a1ddcea9f691e020ac78d327a90144437392022-03-23 16:51:10249 days 2 hrs ago 0x3dcf399725e41455bac7afe8a75815db4c06f54b 0x1edfa2b0d7086a04bbcff300c9be8a50308e23f90.001 Ether
0x17157e77b46a20c44f4cb575b7c7550d31d25158b8c5d0cb82aa63b9be9ec2ca144427672022-03-23 13:13:38249 days 6 hrs ago 0x3dcf399725e41455bac7afe8a75815db4c06f54b 0x1edfa2b0d7086a04bbcff300c9be8a50308e23f90 Ether
0xb962f6d646b539136fb9b7e123c572aaf5da5e7a1e701fbd15554f0e61c4bf01143520202022-03-09 10:24:56263 days 9 hrs ago 0x3dcf399725e41455bac7afe8a75815db4c06f54b 0x1edfa2b0d7086a04bbcff300c9be8a50308e23f90.0005 Ether
0x33f9265a1a6490f0f681722808c239a816a182ab921e0d1ce9bdd1484bc28541143461672022-03-08 12:21:00264 days 7 hrs ago 0x3dcf399725e41455bac7afe8a75815db4c06f54b 0x1edfa2b0d7086a04bbcff300c9be8a50308e23f91 wei
0xaa014688ba328de89091c246cd08803f11f72eb5128a367b51da889b784419db143281442022-03-05 17:10:11267 days 2 hrs ago 0x3dcf399725e41455bac7afe8a75815db4c06f54b 0x1edfa2b0d7086a04bbcff300c9be8a50308e23f90 Ether
0x33cc87692f19ec678f29aef968a3e5dc9955938a3b4641db5e7d3cb5b8f8992c143193522022-03-04 8:26:06268 days 11 hrs ago 0x3dcf399725e41455bac7afe8a75815db4c06f54b 0x1edfa2b0d7086a04bbcff300c9be8a50308e23f90.015 Ether
0xdb8fcce0b85f5526819a4810f71a1658d6c361f27955b8c0cad9121a9619dd3e143169562022-03-03 23:20:29268 days 20 hrs ago 0x3dcf399725e41455bac7afe8a75815db4c06f54b 0x1edfa2b0d7086a04bbcff300c9be8a50308e23f90.0001 Ether
0x63b23688711739ea6db6266af8a7538cef3bc55def5c5640db315fc740249ea4143066032022-03-02 8:53:44270 days 10 hrs ago 0x3dcf399725e41455bac7afe8a75815db4c06f54b 0x1edfa2b0d7086a04bbcff300c9be8a50308e23f90.037 Ether
0xee78b8269e1f0161436fd9633d196e4b8f7d4960a164671bc1bfad8e7156e4e6143024782022-03-01 17:27:12271 days 2 hrs ago 0x3dcf399725e41455bac7afe8a75815db4c06f54b 0x1edfa2b0d7086a04bbcff300c9be8a50308e23f90.00682465 Ether
0x3cd9cbbc46656a53599867ff18664a4d567b52b0e52b72524b6bb2f7af99c450142995802022-03-01 6:54:11271 days 12 hrs ago 0x3dcf399725e41455bac7afe8a75815db4c06f54b 0x1edfa2b0d7086a04bbcff300c9be8a50308e23f90.005 Ether
0xb14b3f23e62cfd03e298e8372c7e3ebe81783688c6795211b08a315e0d34f25c142995502022-03-01 6:49:11271 days 12 hrs ago 0x3dcf399725e41455bac7afe8a75815db4c06f54b 0x1edfa2b0d7086a04bbcff300c9be8a50308e23f90.005 Ether
0x2251aa1c19981a7581f1b3cd1643b28cbb7665d0e58332625067fe5aa889ed13142887842022-02-27 14:40:13273 days 5 hrs ago 0x3dcf399725e41455bac7afe8a75815db4c06f54b 0x1edfa2b0d7086a04bbcff300c9be8a50308e23f90.005 Ether
0x1606ee4abece8a2b60b8898478225d3d28dc65b24aabbd6626c98e941f5096aa142617832022-02-23 10:23:07277 days 9 hrs ago 0x3dcf399725e41455bac7afe8a75815db4c06f54b 0x1edfa2b0d7086a04bbcff300c9be8a50308e23f90.02 Ether
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Auction

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license
File 1 of 6 : Auction.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.4;

import "Ownable.sol";
import "Pausable.sol";
import "SafeMath.sol";
import "IAllocationMinter.sol";

contract Auction is Ownable, Pausable {
    using SafeMath for uint;

    IAllocationMinter public immutable token;
    bytes32 public immutable allocationRole;

    // project-specific multisig address where raised funds will be sent
    address payable destAddress;

    uint public secondsPerAuction;
    uint public currentAuction;
    uint public currentAuctionEndTime;
    uint public totalContributed;
    uint public totalEmitted;
    uint public ewma;

    // The number of participants in a particular auction.
    mapping(uint => uint) public auctionMemberCount;
    // The participants in a particular auction.
    mapping(uint => address[]) public auctionMembers;
    // The total units contributed in a particular auction.
    mapping(uint => uint) public auctionUnits;
    // The remaining unclaimed units from a particular auction.
    mapping(uint => uint) public auctionUnitsRemaining;
    // All tokens auctioned in a paticular auction.
    mapping(uint => uint) public auctionSupply;
    // The remaining unclaimed tokens from a particular auction.
    mapping(uint => uint) public auctionSupplyRemaining;
    // Participant's remaining (unclaimed) units for a particular auction.
    mapping(uint => mapping(address => uint)) public auctionMemberUnitsRemaining;
    // Participant's particular auctions.
    mapping(address => uint[]) public memberAuctions;

    // Events
    event NewAuction(uint auction, uint endTime, uint previousAuctionTotal, uint previousAuctionEmission, uint historicEWMA, uint previousAuctionMembers);
    event Contribution(address indexed payer, address indexed member, uint auction, uint units, uint dailyTotal);
    event Claim(address indexed caller, address indexed member, uint auction, uint value, uint remaining);

    constructor(address payable daoMultisig, IAllocationMinter token_, bytes32 allocationRole_, uint secondsPerAuction_) {
        require(address(daoMultisig) != address(0), "Invalid daoMultisig address");
        require(address(token_) != address(0), "Invalid token_ address");

        _transferOwnership(daoMultisig);

        token = token_;
        allocationRole = allocationRole_;
        destAddress = daoMultisig;
        secondsPerAuction = secondsPerAuction_;
        currentAuction = 1;
        currentAuctionEndTime = block.timestamp + secondsPerAuction;
        require(token_.allocationMinted(allocationRole_) == 0, "auction allocation must have a clean slate");
        uint256 available = token_.allocationSupplyAt(allocationRole_, currentAuctionEndTime);
        auctionSupply[currentAuction] = available;
        auctionSupplyRemaining[currentAuction] = available;
    }

    function setDestAddress(address payable destAddress_)
        public
        onlyOwner()
    {
        require(address(destAddress_) != address(0), "invalid destAddress_");
        destAddress = destAddress_;
    }

    receive()
        external payable
        whenNotPaused
    {
        _contributeFor(msg.sender);
    }

    function contributeFor(address member)
        external payable
        whenNotPaused
    {
        _contributeFor(member);
    }

    function auctionsContributed(address member)
        public view
        returns (uint)
    {
        return memberAuctions[member].length;
    }

    function claim()
        external
        whenNotPaused
        returns (uint value)
    {
        _checkpoint();
        uint length = memberAuctions[msg.sender].length;
        for (uint i = 0; i < length; ++i) {
            uint auction = memberAuctions[msg.sender][i];
            if (auction < currentAuction) {
                uint memberUnits = auctionMemberUnitsRemaining[auction][msg.sender];
                if (memberUnits != 0) {
                    value += _prepareClaim(auction, msg.sender, memberUnits);
                }
            }
        }
        _mint(msg.sender, value);
    }

    function emissionShare(uint auction, address member)
        public view
        returns (uint value)
    {
        uint memberUnits = auctionMemberUnitsRemaining[auction][member];
        if (memberUnits != 0) {
            uint totalUnits = auctionUnitsRemaining[auction];
            uint emissionRemaining = auctionSupplyRemaining[auction];
            value = (emissionRemaining * memberUnits) / totalUnits;
        }
    }

    function impliedPriceEWMA(bool includeCurrent) public view returns (uint) {
        return ewma == 0 || includeCurrent ? computeEWMA() : ewma;
    }

    function computeEWMA() public view returns (uint) {
        uint price = 10**9 * (auctionUnits[currentAuction] / (auctionSupply[currentAuction] / 10**9));
		return ewma == 0 ? price : (7 * price + 3 * ewma) / 10; // alpha = 0.7
    }

    function checkpoint() external {
        _checkpoint();
    }

    function pause()
        public
        onlyOwner()
        whenNotPaused
    {
        _pause();
    }

    function unpause()
        public
        onlyOwner()
        whenPaused
    {
        _unpause();
    }

    function _checkpoint()
        private
    {
        if (block.timestamp >= currentAuctionEndTime) {
            uint units = auctionUnits[currentAuction];
            uint emission = auctionSupply[currentAuction];
			if (units > 0) {
				ewma = computeEWMA();
			}
            uint members = auctionMemberCount[currentAuction];
            currentAuctionEndTime = block.timestamp + secondsPerAuction;
            uint256 available = token.allocationSupplyAt(allocationRole, currentAuctionEndTime) - auctionSupply[currentAuction];

            currentAuction += 1;
            auctionSupply[currentAuction] = available;
            auctionSupplyRemaining[currentAuction] = available;

            emit NewAuction(currentAuction, currentAuctionEndTime, units, emission, ewma, members);
        }
    }

    function _contributeFor(address member)
        private
    {
        require(msg.value > 0, "ETH required");
        _checkpoint();
        _claimPrior(member);
        if (auctionMemberUnitsRemaining[currentAuction][member] == 0) {
            // If hasn't contributed to this Auction yet
            memberAuctions[member].push(currentAuction);
            auctionMemberCount[currentAuction] += 1;
            auctionMembers[currentAuction].push(member);
        }
        auctionMemberUnitsRemaining[currentAuction][member] += msg.value;
        auctionUnits[currentAuction] += msg.value;
        auctionUnitsRemaining[currentAuction] += msg.value;
        totalContributed += msg.value;
        (bool success,) = destAddress.call{value: msg.value}("");
        require(success, "");
        emit Contribution(msg.sender, member, currentAuction, msg.value, auctionUnits[currentAuction]);
    }

    function _claimPrior(address member) private {
        uint i = memberAuctions[member].length;
        while (i > 0) {
            --i;
            uint auction = memberAuctions[member][i];
            if (auction < currentAuction) {
                uint units = auctionMemberUnitsRemaining[auction][member];
                if (units > 0) {
                    _mint(member, _prepareClaim(auction, member, units));
                    //
                    // If a prior auction is found, then it is the only prior auction
                    // that has not already been withdrawn, so there's nothing left to do.
                    //
                    return;
                }
            }
        }
    }

    function _prepareClaim(uint _auction, address _member, uint memberUnits)
        private
        returns (uint value)
    {
        uint totalUnits = auctionUnitsRemaining[_auction];
        uint emissionRemaining = auctionSupplyRemaining[_auction];
        value = (emissionRemaining * memberUnits) / totalUnits;
        auctionMemberUnitsRemaining[_auction][_member] = 0; // since it will be withdrawn
        auctionUnitsRemaining[_auction] = auctionUnitsRemaining[_auction].sub(memberUnits);
        auctionSupplyRemaining[_auction] = auctionSupplyRemaining[_auction].sub(value);
        emit Claim(msg.sender, _member, _auction, value, auctionSupplyRemaining[_auction]);
    }
    
    function _mint(address member, uint value)
        private
    {
        token.allocationMint(member, allocationRole, value);
    }
}

File 2 of 6 : Ownable.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.0 (access/Ownable.sol)

pragma solidity ^0.8.0;

import "Context.sol";

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _transferOwnership(_msgSender());
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

File 3 of 6 : Context.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.0 (utils/Context.sol)

pragma solidity ^0.8.0;

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

File 4 of 6 : Pausable.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.0 (security/Pausable.sol)

pragma solidity ^0.8.0;

import "Context.sol";

/**
 * @dev Contract module which allows children to implement an emergency stop
 * mechanism that can be triggered by an authorized account.
 *
 * This module is used through inheritance. It will make available the
 * modifiers `whenNotPaused` and `whenPaused`, which can be applied to
 * the functions of your contract. Note that they will not be pausable by
 * simply including this module, only once the modifiers are put in place.
 */
abstract contract Pausable is Context {
    /**
     * @dev Emitted when the pause is triggered by `account`.
     */
    event Paused(address account);

    /**
     * @dev Emitted when the pause is lifted by `account`.
     */
    event Unpaused(address account);

    bool private _paused;

    /**
     * @dev Initializes the contract in unpaused state.
     */
    constructor() {
        _paused = false;
    }

    /**
     * @dev Returns true if the contract is paused, and false otherwise.
     */
    function paused() public view virtual returns (bool) {
        return _paused;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is not paused.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    modifier whenNotPaused() {
        require(!paused(), "Pausable: paused");
        _;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is paused.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    modifier whenPaused() {
        require(paused(), "Pausable: not paused");
        _;
    }

    /**
     * @dev Triggers stopped state.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    function _pause() internal virtual whenNotPaused {
        _paused = true;
        emit Paused(_msgSender());
    }

    /**
     * @dev Returns to normal state.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    function _unpause() internal virtual whenPaused {
        _paused = false;
        emit Unpaused(_msgSender());
    }
}

File 5 of 6 : SafeMath.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.0 (utils/math/SafeMath.sol)

pragma solidity ^0.8.0;

// CAUTION
// This version of SafeMath should only be used with Solidity 0.8 or later,
// because it relies on the compiler's built in overflow checks.

/**
 * @dev Wrappers over Solidity's arithmetic operations.
 *
 * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler
 * now has built in overflow checking.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the substraction of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
            // benefit is lost if 'b' is also tested.
            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the division of two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator.
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {trySub}.
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting with custom message when dividing by zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryMod}.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

File 6 of 6 : IAllocationMinter.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.2;

interface IAllocationMinter {
    function allocationSupplyAt(bytes32 role, uint256 timestamp) external view returns (uint256);
    function allocationAvailable(bytes32 role) external view returns (uint256);
    function allocationMint(address to, bytes32 role, uint256 amount) external;
    function allocationMinted(bytes32 role) external view returns (uint256);
}

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

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address payable","name":"daoMultisig","type":"address"},{"internalType":"contract IAllocationMinter","name":"token_","type":"address"},{"internalType":"bytes32","name":"allocationRole_","type":"bytes32"},{"internalType":"uint256","name":"secondsPerAuction_","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"caller","type":"address"},{"indexed":true,"internalType":"address","name":"member","type":"address"},{"indexed":false,"internalType":"uint256","name":"auction","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"remaining","type":"uint256"}],"name":"Claim","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"payer","type":"address"},{"indexed":true,"internalType":"address","name":"member","type":"address"},{"indexed":false,"internalType":"uint256","name":"auction","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"units","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"dailyTotal","type":"uint256"}],"name":"Contribution","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"auction","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"endTime","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"previousAuctionTotal","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"previousAuctionEmission","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"historicEWMA","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"previousAuctionMembers","type":"uint256"}],"name":"NewAuction","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[],"name":"allocationRole","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"auctionMemberCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"}],"name":"auctionMemberUnitsRemaining","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"auctionMembers","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"auctionSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"auctionSupplyRemaining","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"auctionUnits","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"auctionUnitsRemaining","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"member","type":"address"}],"name":"auctionsContributed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"checkpoint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claim","outputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"computeEWMA","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"member","type":"address"}],"name":"contributeFor","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"currentAuction","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentAuctionEndTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"auction","type":"uint256"},{"internalType":"address","name":"member","type":"address"}],"name":"emissionShare","outputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ewma","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"includeCurrent","type":"bool"}],"name":"impliedPriceEWMA","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"memberAuctions","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"secondsPerAuction","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"destAddress_","type":"address"}],"name":"setDestAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"token","outputs":[{"internalType":"contract IAllocationMinter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalContributed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalEmitted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040523480156200001157600080fd5b50604051620019ba380380620019ba833981016040819052620000349162000338565b6200003f33620002e8565b6000805460ff60a01b191690556001600160a01b038416620000a85760405162461bcd60e51b815260206004820152601b60248201527f496e76616c69642064616f4d756c74697369672061646472657373000000000060448201526064015b60405180910390fd5b6001600160a01b038316620001005760405162461bcd60e51b815260206004820152601660248201527f496e76616c696420746f6b656e5f20616464726573730000000000000000000060448201526064016200009f565b6200010b84620002e8565b606083901b6001600160601b03191660805260a0829052600180546001600160a01b0319166001600160a01b03861617815560028290556003556200015181426200039f565b60049081556040516328dbd10b60e11b81529081018390526001600160a01b038416906351b7a2169060240160206040518083038186803b1580156200019657600080fd5b505afa158015620001ab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001d1919062000385565b15620002335760405162461bcd60e51b815260206004820152602a60248201527f61756374696f6e20616c6c6f636174696f6e206d7573742068617665206120636044820152696c65616e20736c61746560b01b60648201526084016200009f565b6004805460405163213b5ea760e21b815291820184905260248201526000906001600160a01b038516906384ed7a9c9060440160206040518083038186803b1580156200027f57600080fd5b505afa15801562000294573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002ba919062000385565b600380546000908152600c6020908152604080832085905592548252600d9052205550620003df9350505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600080600080608085870312156200034f57600080fd5b84516200035c81620003c6565b60208601519094506200036f81620003c6565b6040860151606090960151949790965092505050565b6000602082840312156200039857600080fd5b5051919050565b60008219821115620003c157634e487b7160e01b600052601160045260246000fd5b500190565b6001600160a01b0381168114620003dc57600080fd5b50565b60805160601c60a051611596620004246000396000818161057101528181610e3f01526111da0152600081816105f201528181610e12015261120701526115966000f3fe6080604052600436106101d15760003560e01c80638456cb59116100f7578063af9c370011610095578063f0914c6d11610064578063f0914c6d1461055f578063f1bc2bc314610593578063f2fde38b146105c0578063fc0c546a146105e057600080fd5b8063af9c3700146104fe578063c2c4c5c11461051e578063df0244b114610533578063e196dff11461054957600080fd5b8063a4856699116100d1578063a48566991461047b578063a4e614031461049b578063a70c240a146104c8578063a9dbbbb4146104de57600080fd5b80638456cb591461041e5780638da5cb5b14610433578063a161bf8c1461046557600080fd5b8063440759151161016f57806365477a0f1161013e57806365477a0f14610382578063715018a6146103af5780638072c215146103c457806380f32376146103f157600080fd5b806344075915146102f5578063496a698d1461032d5780634e71d92d146103435780635c975abb1461035857600080fd5b806325c3aa65116101ab57806325c3aa651461027557806325ca7060146102ab5780633f342e76146102c05780633f4ba83a146102e057600080fd5b8063023f4147146102195780630418b36414610242578063107186551461026257600080fd5b3661021457600054600160a01b900460ff16156102095760405162461bcd60e51b81526004016102009061141e565b60405180910390fd5b61021233610614565b005b600080fd5b34801561022557600080fd5b5061022f60055481565b6040519081526020015b60405180910390f35b34801561024e57600080fd5b5061022f61025d366004611378565b610898565b61021261027036600461132f565b6108c2565b34801561028157600080fd5b5061022f61029036600461132f565b6001600160a01b03166000908152600f602052604090205490565b3480156102b757600080fd5b5061022f6108f8565b3480156102cc57600080fd5b5061022f6102db3660046113cc565b61098e565b3480156102ec57600080fd5b506102126109f3565b34801561030157600080fd5b5061022f6103103660046113cc565b600e60209081526000928352604080842090915290825290205481565b34801561033957600080fd5b5061022f60035481565b34801561034f57600080fd5b5061022f610a77565b34801561036457600080fd5b50600054600160a01b900460ff166040519015158152602001610239565b34801561038e57600080fd5b5061022f61039d36600461139a565b600d6020526000908152604090205481565b3480156103bb57600080fd5b50610212610b56565b3480156103d057600080fd5b5061022f6103df36600461139a565b600a6020526000908152604090205481565b3480156103fd57600080fd5b5061022f61040c36600461139a565b600b6020526000908152604090205481565b34801561042a57600080fd5b50610212610b8a565b34801561043f57600080fd5b506000546001600160a01b03165b6040516001600160a01b039091168152602001610239565b34801561047157600080fd5b5061022f60025481565b34801561048757600080fd5b5061021261049636600461132f565b610be6565b3480156104a757600080fd5b5061022f6104b636600461139a565b60086020526000908152604090205481565b3480156104d457600080fd5b5061022f60075481565b3480156104ea57600080fd5b5061022f6104f936600461134c565b610c7f565b34801561050a57600080fd5b5061044d6105193660046113fc565b610cb0565b34801561052a57600080fd5b50610212610ce8565b34801561053f57600080fd5b5061022f60065481565b34801561055557600080fd5b5061022f60045481565b34801561056b57600080fd5b5061022f7f000000000000000000000000000000000000000000000000000000000000000081565b34801561059f57600080fd5b5061022f6105ae36600461139a565b600c6020526000908152604090205481565b3480156105cc57600080fd5b506102126105db36600461132f565b610cf0565b3480156105ec57600080fd5b5061044d7f000000000000000000000000000000000000000000000000000000000000000081565b600034116106535760405162461bcd60e51b815260206004820152600c60248201526b115512081c995c5d5a5c995960a21b6044820152606401610200565b61065b610d88565b61066481610f67565b6003546000908152600e602090815260408083206001600160a01b0385168452909152902054610719576001600160a01b0381166000908152600f60209081526040808320600380548254600181810185559387528587200155548452600890925282208054919290916106d990849061147d565b909155505060035460009081526009602090815260408220805460018101825590835291200180546001600160a01b0319166001600160a01b0383161790555b6003546000908152600e602090815260408083206001600160a01b03851684529091528120805434929061074e90849061147d565b90915550506003546000908152600a60205260408120805434929061077490849061147d565b90915550506003546000908152600b60205260408120805434929061079a90849061147d565b9250508190555034600560008282546107b3919061147d565b90915550506001546040516000916001600160a01b03169034908381818185875af1925050503d8060008114610805576040519150601f19603f3d011682016040523d82523d6000602084013e61080a565b606091505b50509050806108355760405162461bcd60e51b81526020600482015260006024820152604401610200565b6003546000818152600a6020908152604091829020548251938452349184019190915282820152516001600160a01b0384169133917f4105b3823228a5e29fcbd97f37ba5ab0284f239281f081193e2488169ee2c5b59181900360600190a35050565b6000600754600014806108a85750815b6108b4576007546108bc565b6108bc6108f8565b92915050565b600054600160a01b900460ff16156108ec5760405162461bcd60e51b81526004016102009061141e565b6108f581610614565b50565b6003546000908152600c6020526040812054819061091b90633b9aca0090611495565b6003546000908152600a60205260409020546109379190611495565b61094590633b9aca006114b7565b905060075460001461098657600a600754600361096291906114b7565b61096d8360076114b7565b610977919061147d565b6109819190611495565b610988565b805b91505090565b6000828152600e602090815260408083206001600160a01b038516845290915281205480156109ec576000848152600b6020908152604080832054600d90925290912054816109dd84836114b7565b6109e79190611495565b935050505b5092915050565b6000546001600160a01b03163314610a1d5760405162461bcd60e51b815260040161020090611448565b600054600160a01b900460ff16610a6d5760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610200565b610a75611025565b565b60008054600160a01b900460ff1615610aa25760405162461bcd60e51b81526004016102009061141e565b610aaa610d88565b336000908152600f6020526040812054905b81811015610b4757336000908152600f60205260408120805483908110610ae557610ae5611535565b90600052602060002001549050600354811015610b36576000818152600e602090815260408083203384529091529020548015610b3457610b278233836110c2565b610b31908661147d565b94505b505b50610b4081611504565b9050610abc565b50610b5233836111bb565b5090565b6000546001600160a01b03163314610b805760405162461bcd60e51b815260040161020090611448565b610a756000611267565b6000546001600160a01b03163314610bb45760405162461bcd60e51b815260040161020090611448565b600054600160a01b900460ff1615610bde5760405162461bcd60e51b81526004016102009061141e565b610a756112b7565b6000546001600160a01b03163314610c105760405162461bcd60e51b815260040161020090611448565b6001600160a01b038116610c5d5760405162461bcd60e51b8152602060048201526014602482015273696e76616c69642064657374416464726573735f60601b6044820152606401610200565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b600f6020528160005260406000208181548110610c9b57600080fd5b90600052602060002001600091509150505481565b60096020528160005260406000208181548110610ccc57600080fd5b6000918252602090912001546001600160a01b03169150829050565b610a75610d88565b6000546001600160a01b03163314610d1a5760405162461bcd60e51b815260040161020090611448565b6001600160a01b038116610d7f5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610200565b6108f581611267565b6004544210610a75576003546000908152600a6020908152604080832054600c909252909120548115610dc157610dbd6108f8565b6007555b600354600090815260086020526040902054600254610de0904261147d565b60048181556003546000908152600c602052604080822054905163213b5ea760e21b8152919390926001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016926384ed7a9c92610e6e927f00000000000000000000000000000000000000000000000000000000000000009201918252602082015260400190565b60206040518083038186803b158015610e8657600080fd5b505afa158015610e9a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ebe91906113b3565b610ec891906114d6565b9050600160036000828254610edd919061147d565b9091555050600380546000908152600c6020908152604080832085905583548352600d825291829020849055915460045460075483519283529382015280820187905260608101869052608081019290925260a08201849052517f258560b026a56a296599cd6b9470cc1143ece6f555f315dfcb1a846e3b354ca69181900360c00190a150505050565b6001600160a01b0381166000908152600f60205260409020545b801561102157610f90816114ed565b6001600160a01b0383166000908152600f602052604081208054929350909183908110610fbf57610fbf611535565b9060005260206000200154905060035481101561101b576000818152600e602090815260408083206001600160a01b03871684529091529020548015611019576110138461100e8487856110c2565b6111bb565b50505050565b505b50610f81565b5050565b600054600160a01b900460ff166110755760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610200565b6000805460ff60a01b191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b6000838152600b6020908152604080832054600d909252822054816110e785836114b7565b6110f19190611495565b6000878152600e602090815260408083206001600160a01b038a1684528252808320839055898352600b90915290205490935061112e908561131c565b6000878152600b6020908152604080832093909355600d90522054611153908461131c565b6000878152600d6020908152604091829020839055815189815290810186905280820192909252516001600160a01b0387169133917f9137e112a187039f8a3291c0a66fce97153d25ec42036e82360d5d0106d19a6e9181900360600190a350509392505050565b60405163b4bc76d160e01b81526001600160a01b0383811660048301527f00000000000000000000000000000000000000000000000000000000000000006024830152604482018390527f0000000000000000000000000000000000000000000000000000000000000000169063b4bc76d190606401600060405180830381600087803b15801561124b57600080fd5b505af115801561125f573d6000803e3d6000fd5b505050505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600054600160a01b900460ff16156112e15760405162461bcd60e51b81526004016102009061141e565b6000805460ff60a01b1916600160a01b1790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586110a53390565b600061132882846114d6565b9392505050565b60006020828403121561134157600080fd5b81356113288161154b565b6000806040838503121561135f57600080fd5b823561136a8161154b565b946020939093013593505050565b60006020828403121561138a57600080fd5b8135801515811461132857600080fd5b6000602082840312156113ac57600080fd5b5035919050565b6000602082840312156113c557600080fd5b5051919050565b600080604083850312156113df57600080fd5b8235915060208301356113f18161154b565b809150509250929050565b6000806040838503121561140f57600080fd5b50508035926020909101359150565b60208082526010908201526f14185d5cd8589b194e881c185d5cd95960821b604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600082198211156114905761149061151f565b500190565b6000826114b257634e487b7160e01b600052601260045260246000fd5b500490565b60008160001904831182151516156114d1576114d161151f565b500290565b6000828210156114e8576114e861151f565b500390565b6000816114fc576114fc61151f565b506000190190565b60006000198214156115185761151861151f565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b03811681146108f557600080fdfea2646970667358221220b23f7eeb63b20fc809151551040c1a916ccc103ef1b1d78ca1ec91d3b833546a64736f6c634300080700330000000000000000000000001edfa2b0d7086a04bbcff300c9be8a50308e23f90000000000000000000000006a49f399ee55399f9bcf9f6f14d5ba557c862d96fe4d235e1506d40db9cce7717b88f27784c1ca7ef0429124474d4e8408e1714a0000000000000000000000000000000000000000000000000000000000093a80

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

0000000000000000000000001edfa2b0d7086a04bbcff300c9be8a50308e23f90000000000000000000000006a49f399ee55399f9bcf9f6f14d5ba557c862d96fe4d235e1506d40db9cce7717b88f27784c1ca7ef0429124474d4e8408e1714a0000000000000000000000000000000000000000000000000000000000093a80

-----Decoded View---------------
Arg [0] : daoMultisig (address): 0x1EDFA2b0D7086A04bBcFF300c9BE8a50308e23f9
Arg [1] : token_ (address): 0x6a49F399ee55399f9BcF9f6F14d5bA557C862D96
Arg [2] : allocationRole_ (bytes32): 0xfe4d235e1506d40db9cce7717b88f27784c1ca7ef0429124474d4e8408e1714a
Arg [3] : secondsPerAuction_ (uint256): 604800

-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 0000000000000000000000001edfa2b0d7086a04bbcff300c9be8a50308e23f9
Arg [1] : 0000000000000000000000006a49f399ee55399f9bcf9f6f14d5ba557c862d96
Arg [2] : fe4d235e1506d40db9cce7717b88f27784c1ca7ef0429124474d4e8408e1714a
Arg [3] : 0000000000000000000000000000000000000000000000000000000000093a80


Block Transaction Difficulty Gas Used Reward
Block Uncle Number Difficulty Gas Used Reward
Loading
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.

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.