ETH Price: $2,064.29 (-4.29%)
Gas: 0.08 Gwei

Contract

0x3339EC512996FcDFAcAE2FbE941b6820f2C4e8b2
 

More Info

Private Name Tags

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Collect Authoriz...86311162019-09-27 13:18:502351 days ago1569590330IN
0x3339EC51...0f2C4e8b2
0 ETH0.0008022420.0001
Collect Authoriz...86180992019-09-25 12:23:222353 days ago1569414202IN
0x3339EC51...0f2C4e8b2
0 ETH0.001002825
Authorize Paymen...86142542019-09-24 21:48:472354 days ago1569361727IN
0x3339EC51...0f2C4e8b2
0 ETH0.0039644420.0000001
Collect Authoriz...86142182019-09-24 21:40:072354 days ago1569361207IN
0x3339EC51...0f2C4e8b2
0 ETH0.0008423521
Authorize Paymen...86142142019-09-24 21:39:442354 days ago1569361184IN
0x3339EC51...0f2C4e8b2
0 ETH0.0041720721.00001
Authorize Paymen...86102252019-09-24 6:39:122355 days ago1569307152IN
0x3339EC51...0f2C4e8b2
0 ETH0.001830310
Authorize Paymen...86102252019-09-24 6:39:122355 days ago1569307152IN
0x3339EC51...0f2C4e8b2
0 ETH0.0018296610
Authorize Paymen...86099382019-09-24 5:27:592355 days ago1569302879IN
0x3339EC51...0f2C4e8b2
0 ETH0.0030793822
Set Timelock86099332019-09-24 5:26:202355 days ago1569302780IN
0x3339EC51...0f2C4e8b2
0 ETH0.0005735321
Authorize Spende...86099332019-09-24 5:26:202355 days ago1569302780IN
0x3339EC51...0f2C4e8b2
0 ETH0.0009543621
Escape Hatch35386562017-04-15 7:47:013247 days ago1492242421IN
0x3339EC51...0f2C4e8b2
0 ETH0.000650820
Change Owner35349432017-04-14 16:13:133247 days ago1492186393IN
0x3339EC51...0f2C4e8b2
0 ETH0.0006095820
Authorize Spende...35349292017-04-14 16:08:583247 days ago1492186138IN
0x3339EC51...0f2C4e8b2
0 ETH0.0009089220

Latest 8 internal transactions

Advanced mode:
Parent Transaction Hash Method Block
From
To
-86311162019-09-27 13:18:502351 days ago1569590330
0x3339EC51...0f2C4e8b2
24.99999999 ETH
-86180992019-09-25 12:23:222353 days ago1569414202
0x3339EC51...0f2C4e8b2
65 ETH
-86142182019-09-24 21:40:072354 days ago1569361207
0x3339EC51...0f2C4e8b2
1 wei
Transfer42602612017-09-10 22:26:483098 days ago1505082408
0x3339EC51...0f2C4e8b2
80 ETH
Transfer42602542017-09-10 22:23:113098 days ago1505082191
0x3339EC51...0f2C4e8b2
30 ETH
Transfer36021222017-04-26 5:32:003236 days ago1493184720
0x3339EC51...0f2C4e8b2
200 ETH
Transfer35386562017-04-15 7:47:013247 days ago1492242421
0x3339EC51...0f2C4e8b2
0.1 ETH
Transfer35386412017-04-15 7:43:273247 days ago1492242207
0x3339EC51...0f2C4e8b2
0.1 ETH
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:
Vault

Compiler Version
v0.4.10+commit.f0d539ae

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion
/**
 *Submitted for verification at Etherscan.io on 2017-04-18
*/

pragma solidity ^0.4.6;


/*
    Copyright 2016, Jordi Baylina

    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

/// @title Vault Contract
/// @author Jordi Baylina
/// @notice This contract holds funds for Campaigns and automates payments. For
///  this iteration the funds will come straight from the Giveth Multisig as a
///  safety precaution, but once fully tested and optimized this contract will
///  be a safe place to store funds equipped with optional variable time delays
///  to allow for an optional escape hatch

/// @dev `Owned` is a base level contract that assigns an `owner` that can be
///  later changed
contract Owned {
    /// @dev `owner` is the only address that can call a function with this
    /// modifier
    modifier onlyOwner { if (msg.sender != owner) throw; _; }

    address public owner;

    /// @notice The Constructor assigns the message sender to be `owner`
    function Owned() { owner = msg.sender;}

    /// @notice `owner` can step down and assign some other address to this role
    /// @param _newOwner The address of the new owner. 0x0 can be used to create
    ///  an unowned neutral vault, however that cannot be undone
    function changeOwner(address _newOwner) onlyOwner {
        owner = _newOwner;
        NewOwner(msg.sender, _newOwner);
    }

    event NewOwner(address indexed oldOwner, address indexed newOwner);
}
/// @dev `Escapable` is a base level contract built off of the `Owned`
///  contract that creates an escape hatch function to send its ether to
///  `escapeHatchDestination` when called by the `escapeHatchCaller` in the case that
///  something unexpected happens
contract Escapable is Owned {
    address public escapeHatchCaller;
    address public escapeHatchDestination;

    /// @notice The Constructor assigns the `escapeHatchDestination` and the
    ///  `escapeHatchCaller`
    /// @param _escapeHatchDestination The address of a safe location (usu a
    ///  Multisig) to send the ether held in this contract
    /// @param _escapeHatchCaller The address of a trusted account or contract to
    ///  call `escapeHatch()` to send the ether in this contract to the
    ///  `escapeHatchDestination` it would be ideal that `escapeHatchCaller` cannot move
    ///  funds out of `escapeHatchDestination`
    function Escapable(address _escapeHatchCaller, address _escapeHatchDestination) {
        escapeHatchCaller = _escapeHatchCaller;
        escapeHatchDestination = _escapeHatchDestination;
    }

    /// @dev The addresses preassigned the `escapeHatchCaller` role
    ///  is the only addresses that can call a function with this modifier
    modifier onlyEscapeHatchCallerOrOwner {
        if ((msg.sender != escapeHatchCaller)&&(msg.sender != owner))
            throw;
        _;
    }

    /// @notice The `escapeHatch()` should only be called as a last resort if a
    /// security issue is uncovered or something unexpected happened
    function escapeHatch() onlyEscapeHatchCallerOrOwner {
        uint total = this.balance;
        // Send the total balance of this contract to the `escapeHatchDestination`
        if (!escapeHatchDestination.send(total)) {
            throw;
        }
        EscapeHatchCalled(total);
    }
    /// @notice Changes the address assigned to call `escapeHatch()`
    /// @param _newEscapeHatchCaller The address of a trusted account or contract to
    ///  call `escapeHatch()` to send the ether in this contract to the
    ///  `escapeHatchDestination` it would be ideal that `escapeHatchCaller` cannot
    ///  move funds out of `escapeHatchDestination`
    function changeEscapeCaller(address _newEscapeHatchCaller) onlyEscapeHatchCallerOrOwner {
        escapeHatchCaller = _newEscapeHatchCaller;
    }

    event EscapeHatchCalled(uint amount);
}

/// @dev `Vault` is a higher level contract built off of the `Escapable`
///  contract that holds funds for Campaigns and automates payments.
contract Vault is Escapable {

    /// @dev `Payment` is a public structure that describes the details of
    ///  each payment making it easy to track the movement of funds
    ///  transparently
    struct Payment {
        string name;     // What is the purpose of this payment
        bytes32 reference;  // Reference of the payment.
        address spender;        // Who is sending the funds
        uint earliestPayTime;   // The earliest a payment can be made (Unix Time)
        bool canceled;         // If True then the payment has been canceled
        bool paid;              // If True then the payment has been paid
        address recipient;      // Who is receiving the funds
        uint amount;            // The amount of wei sent in the payment
        uint securityGuardDelay;// The seconds `securityGuard` can delay payment
    }

    Payment[] public authorizedPayments;

    address public securityGuard;
    uint public absoluteMinTimeLock;
    uint public timeLock;
    uint public maxSecurityGuardDelay;

    /// @dev The white list of approved addresses allowed to set up && receive
    ///  payments from this vault
    mapping (address => bool) public allowedSpenders;

    /// @dev The address assigned the role of `securityGuard` is the only
    ///  addresses that can call a function with this modifier
    modifier onlySecurityGuard { if (msg.sender != securityGuard) throw; _; }

    // @dev Events to make the payment movements easy to find on the blockchain
    event PaymentAuthorized(uint indexed idPayment, address indexed recipient, uint amount);
    event PaymentExecuted(uint indexed idPayment, address indexed recipient, uint amount);
    event PaymentCanceled(uint indexed idPayment);
    event EtherReceived(address indexed from, uint amount);
    event SpenderAuthorization(address indexed spender, bool authorized);

/////////
// Constructor
/////////

    /// @notice The Constructor creates the Vault on the blockchain
    /// @param _escapeHatchCaller The address of a trusted account or contract to
    ///  call `escapeHatch()` to send the ether in this contract to the
    ///  `escapeHatchDestination` it would be ideal if `escapeHatchCaller` cannot move
    ///  funds out of `escapeHatchDestination`
    /// @param _escapeHatchDestination The address of a safe location (usu a
    ///  Multisig) to send the ether held in this contract in an emergency
    /// @param _absoluteMinTimeLock The minimum number of seconds `timelock` can
    ///  be set to, if set to 0 the `owner` can remove the `timeLock` completely
    /// @param _timeLock Initial number of seconds that payments are delayed
    ///  after they are authorized (a security precaution)
    /// @param _securityGuard Address that will be able to delay the payments
    ///  beyond the initial timelock requirements; can be set to 0x0 to remove
    ///  the `securityGuard` functionality
    /// @param _maxSecurityGuardDelay The maximum number of seconds in total
    ///   that `securityGuard` can delay a payment so that the owner can cancel
    ///   the payment if needed
    function Vault(
        address _escapeHatchCaller,
        address _escapeHatchDestination,
        uint _absoluteMinTimeLock,
        uint _timeLock,
        address _securityGuard,
        uint _maxSecurityGuardDelay) Escapable(_escapeHatchCaller, _escapeHatchDestination)
    {
        absoluteMinTimeLock = _absoluteMinTimeLock;
        timeLock = _timeLock;
        securityGuard = _securityGuard;
        maxSecurityGuardDelay = _maxSecurityGuardDelay;
    }

/////////
// Helper functions
/////////

    /// @notice States the total number of authorized payments in this contract
    /// @return The number of payments ever authorized even if they were canceled
    function numberOfAuthorizedPayments() constant returns (uint) {
        return authorizedPayments.length;
    }

//////
// Receive Ether
//////

    /// @notice Called anytime ether is sent to the contract && creates an event
    /// to more easily track the incoming transactions
    function receiveEther() payable {
        EtherReceived(msg.sender, msg.value);
    }

    /// @notice The fall back function is called whenever ether is sent to this
    ///  contract
    function () payable {
        receiveEther();
    }

////////
// Spender Interface
////////

    /// @notice only `allowedSpenders[]` Creates a new `Payment`
    /// @param _name Brief description of the payment that is authorized
    /// @param _reference External reference of the payment
    /// @param _recipient Destination of the payment
    /// @param _amount Amount to be paid in wei
    /// @param _paymentDelay Number of seconds the payment is to be delayed, if
    ///  this value is below `timeLock` then the `timeLock` determines the delay
    /// @return The Payment ID number for the new authorized payment
    function authorizePayment(
        string _name,
        bytes32 _reference,
        address _recipient,
        uint _amount,
        uint _paymentDelay
    ) returns(uint) {

        // Fail if you arent on the `allowedSpenders` white list
        if (!allowedSpenders[msg.sender] ) throw;
        uint idPayment = authorizedPayments.length;       // Unique Payment ID
        authorizedPayments.length++;

        // The following lines fill out the payment struct
        Payment p = authorizedPayments[idPayment];
        p.spender = msg.sender;

        // Overflow protection
        if (_paymentDelay > 10**18) throw;

        // Determines the earliest the recipient can receive payment (Unix time)
        p.earliestPayTime = _paymentDelay >= timeLock ?
                                now + _paymentDelay :
                                now + timeLock;
        p.recipient = _recipient;
        p.amount = _amount;
        p.name = _name;
        p.reference = _reference;
        PaymentAuthorized(idPayment, p.recipient, p.amount);
        return idPayment;
    }

    /// @notice only `allowedSpenders[]` The recipient of a payment calls this
    ///  function to send themselves the ether after the `earliestPayTime` has
    ///  expired
    /// @param _idPayment The payment ID to be executed
    function collectAuthorizedPayment(uint _idPayment) {

        // Check that the `_idPayment` has been added to the payments struct
        if (_idPayment >= authorizedPayments.length) throw;

        Payment p = authorizedPayments[_idPayment];

        // Checking for reasons not to execute the payment
        if (msg.sender != p.recipient) throw;
        if (!allowedSpenders[p.spender]) throw;
        if (now < p.earliestPayTime) throw;
        if (p.canceled) throw;
        if (p.paid) throw;
        if (this.balance < p.amount) throw;

        p.paid = true; // Set the payment to being paid
        if (!p.recipient.send(p.amount)) {  // Make the payment
            throw;
        }
        PaymentExecuted(_idPayment, p.recipient, p.amount);
     }

/////////
// SecurityGuard Interface
/////////

    /// @notice `onlySecurityGuard` Delays a payment for a set number of seconds
    /// @param _idPayment ID of the payment to be delayed
    /// @param _delay The number of seconds to delay the payment
    function delayPayment(uint _idPayment, uint _delay) onlySecurityGuard {
        if (_idPayment >= authorizedPayments.length) throw;

        // Overflow test
        if (_delay > 10**18) throw;

        Payment p = authorizedPayments[_idPayment];

        if ((p.securityGuardDelay + _delay > maxSecurityGuardDelay) ||
            (p.paid) ||
            (p.canceled))
            throw;

        p.securityGuardDelay += _delay;
        p.earliestPayTime += _delay;
    }

////////
// Owner Interface
///////

    /// @notice `onlyOwner` Cancel a payment all together
    /// @param _idPayment ID of the payment to be canceled.
    function cancelPayment(uint _idPayment) onlyOwner {
        if (_idPayment >= authorizedPayments.length) throw;

        Payment p = authorizedPayments[_idPayment];


        if (p.canceled) throw;
        if (p.paid) throw;

        p.canceled = true;
        PaymentCanceled(_idPayment);
    }

    /// @notice `onlyOwner` Adds a spender to the `allowedSpenders[]` white list
    /// @param _spender The address of the contract being authorized/unauthorized
    /// @param _authorize `true` if authorizing and `false` if unauthorizing
    function authorizeSpender(address _spender, bool _authorize) onlyOwner {
        allowedSpenders[_spender] = _authorize;
        SpenderAuthorization(_spender, _authorize);
    }

    /// @notice `onlyOwner` Sets the address of `securityGuard`
    /// @param _newSecurityGuard Address of the new security guard
    function setSecurityGuard(address _newSecurityGuard) onlyOwner {
        securityGuard = _newSecurityGuard;
    }

    /// @notice `onlyOwner` Changes `timeLock`; the new `timeLock` cannot be
    ///  lower than `absoluteMinTimeLock`
    /// @param _newTimeLock Sets the new minimum default `timeLock` in seconds;
    ///  pending payments maintain their `earliestPayTime`
    function setTimelock(uint _newTimeLock) onlyOwner {
        if (_newTimeLock < absoluteMinTimeLock) throw;
        timeLock = _newTimeLock;
    }

    /// @notice `onlyOwner` Changes the maximum number of seconds
    /// `securityGuard` can delay a payment
    /// @param _maxSecurityGuardDelay The new maximum delay in seconds that
    ///  `securityGuard` can delay the payment's execution in total
    function setMaxSecurityGuardDelay(uint _maxSecurityGuardDelay) onlyOwner {
        maxSecurityGuardDelay = _maxSecurityGuardDelay;
    }
}

Contract Security Audit

Contract ABI

API
[{"constant":true,"inputs":[],"name":"maxSecurityGuardDelay","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[],"name":"escapeHatch","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_newTimeLock","type":"uint256"}],"name":"setTimelock","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"escapeHatchCaller","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_name","type":"string"},{"name":"_reference","type":"bytes32"},{"name":"_recipient","type":"address"},{"name":"_amount","type":"uint256"},{"name":"_paymentDelay","type":"uint256"}],"name":"authorizePayment","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_newEscapeHatchCaller","type":"address"}],"name":"changeEscapeCaller","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"numberOfAuthorizedPayments","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_authorize","type":"bool"}],"name":"authorizeSpender","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_idPayment","type":"uint256"}],"name":"cancelPayment","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_idPayment","type":"uint256"},{"name":"_delay","type":"uint256"}],"name":"delayPayment","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_idPayment","type":"uint256"}],"name":"collectAuthorizedPayment","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"authorizedPayments","outputs":[{"name":"name","type":"string"},{"name":"reference","type":"bytes32"},{"name":"spender","type":"address"},{"name":"earliestPayTime","type":"uint256"},{"name":"canceled","type":"bool"},{"name":"paid","type":"bool"},{"name":"recipient","type":"address"},{"name":"amount","type":"uint256"},{"name":"securityGuardDelay","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[],"name":"receiveEther","outputs":[],"payable":true,"type":"function"},{"constant":false,"inputs":[{"name":"_newOwner","type":"address"}],"name":"changeOwner","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"securityGuard","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_newSecurityGuard","type":"address"}],"name":"setSecurityGuard","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"timeLock","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"allowedSpenders","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_maxSecurityGuardDelay","type":"uint256"}],"name":"setMaxSecurityGuardDelay","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"absoluteMinTimeLock","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"escapeHatchDestination","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"inputs":[{"name":"_escapeHatchCaller","type":"address"},{"name":"_escapeHatchDestination","type":"address"},{"name":"_absoluteMinTimeLock","type":"uint256"},{"name":"_timeLock","type":"uint256"},{"name":"_securityGuard","type":"address"},{"name":"_maxSecurityGuardDelay","type":"uint256"}],"payable":false,"type":"constructor"},{"payable":true,"type":"fallback"},{"anonymous":false,"inputs":[{"indexed":true,"name":"idPayment","type":"uint256"},{"indexed":true,"name":"recipient","type":"address"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"PaymentAuthorized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"idPayment","type":"uint256"},{"indexed":true,"name":"recipient","type":"address"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"PaymentExecuted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"idPayment","type":"uint256"}],"name":"PaymentCanceled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"EtherReceived","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"spender","type":"address"},{"indexed":false,"name":"authorized","type":"bool"}],"name":"SpenderAuthorization","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"amount","type":"uint256"}],"name":"EscapeHatchCalled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"oldOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"NewOwner","type":"event"}]

6060604052341561000c57fe5b60405160c080610f9483398101604090815281516020830151918301516060840151608085015160a090950151929491929091905b85855b5b60008054600160a060020a03191633600160a060020a03161790555b60018054600160a060020a03808516600160a060020a03199283161790925560028054928416929091169190911790555b50506005849055600683905560048054600160a060020a031916600160a060020a03841617905560078190555b5050505050505b610ebf806100d56000396000f3006060604052361561010c5763ffffffff60e060020a6000350416630b2e7423811461011d5780631554611f1461013f5780631e891c0a146101515780631f6eb6e71461016657806320ea253314610192578063681617c71461021657806368b8c5a114610234578063793c0fd4146102565780638422927d14610279578063846a5dde1461028e5780638da5cb5b146102a657806392e4b8a4146102d2578063a0927a6a146102e7578063a3912ec8146103d5578063a6f9dae1146103df578063b2ca3ec4146103fd578063bb2a51d114610429578063d085835a14610447578063d8528af014610469578063da4793ac14610499578063ea8a66c7146104ae578063f5b61230146104d0575b61011b5b6101186104fc565b5b565b005b341561012557fe5b61012d61053e565b60408051918252519081900360200190f35b341561014757fe5b61011b610544565b005b341561015957fe5b61011b6004356105f1565b005b341561016e57fe5b610176610627565b60408051600160a060020a039092168252519081900360200190f35b341561019a57fe5b61012d600480803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284375094965050843594600160a060020a036020820135169450604081013593506060013591506106369050565b60408051918252519081900360200190f35b341561021e57fe5b61011b600160a060020a036004351661079e565b005b341561023c57fe5b61012d6107f7565b60408051918252519081900360200190f35b341561025e57fe5b61011b600160a060020a036004351660243515156107fe565b005b341561028157fe5b61011b60043561087c565b005b341561029657fe5b61011b600435602435610936565b005b34156102ae57fe5b6101766109f0565b60408051600160a060020a039092168252519081900360200190f35b34156102da57fe5b61011b6004356109ff565b005b34156102ef57fe5b6102fa600435610b85565b60408051602081018a9052600160a060020a03808a169282019290925260608101889052861515608082015285151560a082015290841660c082015260e081018390526101008082018390526101208083528b546002600182161590930260001901169190910490820181905281906101408201908c9080156103be5780601f10610393576101008083540402835291602001916103be565b820191906000526020600020905b8154815290600101906020018083116103a157829003601f168201915b50509a505050505050505050505060405180910390f35b61011b6104fc565b005b34156103e757fe5b61011b600160a060020a0360043516610bf2565b005b341561040557fe5b610176610c5f565b60408051600160a060020a039092168252519081900360200190f35b341561043157fe5b61011b600160a060020a0360043516610c6e565b005b341561044f57fe5b61012d610caa565b60408051918252519081900360200190f35b341561047157fe5b610485600160a060020a0360043516610cb0565b604080519115158252519081900360200190f35b34156104a157fe5b61011b600435610cc5565b005b34156104b657fe5b61012d610ceb565b60408051918252519081900360200190f35b34156104d857fe5b610176610cf1565b60408051600160a060020a039092168252519081900360200190f35b604080513481529051600160a060020a033316917f1e57e3bb474320be3d2c77138f75b7c3941292d647f5f9634e33a8e94e0e069b919081900360200190a25b565b60075481565b60015460009033600160a060020a03908116911614801590610575575060005433600160a060020a03908116911614155b156105805760006000fd5b50600254604051600160a060020a033081163192169082156108fc029083906000818181858888f1935050505015156105b95760006000fd5b6040805182815290517f3a7a1ba90aaa86fa9f6b921c3d600a5c870f8ebd05e7fbd30f93930f3caa5db59181900360200190a15b5b50565b60005433600160a060020a0390811691161461060d5760006000fd5b60055481101561061d5760006000fd5b60068190555b5b50565b600154600160a060020a031681565b600160a060020a0333166000908152600860205260408120548190819060ff1615156106625760006000fd5b60038054925082906106779060018301610d00565b50600380548390811061068657fe5b906000526020600020906007020160005b50600281018054600160a060020a03191633600160a060020a03161790559050670de0b6b3a76400008411156106cd5760006000fd5b6006548410156106e15760065442016106e5565b8342015b600382015560048101805475ffffffffffffffffffffffffffffffffffffffff0000191662010000600160a060020a0389160217905560058101859055875161073490829060208b0190610d32565b5060018101879055600481015460058201546040805191825251600160a060020a0362010000909304929092169184917f47e9633c99dd05fabd1b937e7c85f9e00d6866bfd2e5885e0091f40a173be3d3919081900360200190a38192505b505095945050505050565b60015433600160a060020a039081169116148015906107cc575060005433600160a060020a03908116911614155b156107d75760006000fd5b60018054600160a060020a031916600160a060020a0383161790555b5b50565b6003545b90565b60005433600160a060020a0390811691161461081a5760006000fd5b600160a060020a038216600081815260086020908152604091829020805460ff1916851515908117909155825190815291517f801f568efbc3346a6ae3d0c3eb335a30d64e0d3cf08f1c39626d62cd5c8272819281900390910190a25b5b5050565b6000805433600160a060020a039081169116146108995760006000fd5b60035482106108a85760006000fd5b60038054839081106108b657fe5b906000526020600020906007020160005b50600481015490915060ff16156108de5760006000fd5b6004810154610100900460ff16156108f65760006000fd5b60048101805460ff1916600117905560405182907ffdf197ed54809861dafe0b4d391843652730ac67274c1e9e46db7687dccaa30190600090a25b5b5050565b60045460009033600160a060020a039081169116146109555760006000fd5b60035483106109645760006000fd5b670de0b6b3a764000082111561097a5760006000fd5b600380548490811061098857fe5b906000526020600020906007020160005b5090506007548282600601540111806109bb57506004810154610100900460ff165b806109ca5750600481015460ff165b156109d55760006000fd5b60068101805483019055600381018054830190555b5b505050565b600054600160a060020a031681565b6003546000908210610a115760006000fd5b6003805483908110610a1f57fe5b906000526020600020906007020160005b50600481015490915033600160a060020a03908116620100009092041614610a585760006000fd5b6002810154600160a060020a031660009081526008602052604090205460ff161515610a845760006000fd5b8060030154421015610a965760006000fd5b600481015460ff1615610aa95760006000fd5b6004810154610100900460ff1615610ac15760006000fd5b806005015430600160a060020a0316311015610add5760006000fd5b60048101805461010061ff00199091161790819055600582015460405162010000909204600160a060020a0316916108fc82150291906000818181858888f193505050501515610b2d5760006000fd5b600481015460058201546040805191825251600160a060020a0362010000909304929092169184917f7f5bfe3018715b26a7067888a5c42912fbb3485170b8154ea9a448661f2f0de2919081900360200190a35b5050565b6003805482908110610b9357fe5b906000526020600020906007020160005b506001810154600282015460038301546004840154600585015460068601549596509394600160a060020a0393841694929360ff808416946101008504909116936201000090049091169189565b60005433600160a060020a03908116911614610c0e5760006000fd5b60008054600160a060020a031916600160a060020a038381169182178355604051919233909116917f70aea8d848e8a90fb7661b227dc522eb6395c3dac71b63cb59edd5c9899b23649190a35b5b50565b600454600160a060020a031681565b60005433600160a060020a03908116911614610c8a5760006000fd5b60048054600160a060020a031916600160a060020a0383161790555b5b50565b60065481565b60086020526000908152604090205460ff1681565b60005433600160a060020a03908116911614610ce15760006000fd5b60078190555b5b50565b60055481565b600254600160a060020a031681565b8154818355818115116109ea576007028160070283600052602060002091820191016109ea9190610db1565b5b505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10610d7357805160ff1916838001178555610da0565b82800160010185558215610da0579182015b82811115610da0578251825591602001919060010190610d85565b5b50610dad929150610e2a565b5090565b6107fb91905b80821115610dad576000610dcb8282610e4b565b50600060018201819055600282018054600160a060020a03191690556003820181905560048201805475ffffffffffffffffffffffffffffffffffffffffffff19169055600582018190556006820155600701610db7565b5090565b90565b6107fb91905b80821115610dad5760008155600101610e30565b5090565b90565b50805460018160011615610100020316600290046000825580601f10610e7157506105ed565b601f0160209004906000526020600020908101906105ed9190610e2a565b5b505600a165627a7a72305820dd8149b751b405b692f95feb08ecb20f6a9994da768ce4427a7aa1d30c3ea2f30029000000000000000000000000839395e20bbb182fa440d08f850e6c7a8f6f078000000000000000000000000032bacc8b241fb172fee18bda32527126c6f3c5f70000000000000000000000000000000000000000000000000000000000000e100000000000000000000000000000000000000000000000000000000000015180000000000000000000000000839395e20bbb182fa440d08f850e6c7a8f6f07800000000000000000000000000000000000000000000000000000000000127500

Deployed Bytecode

0x6060604052361561010c5763ffffffff60e060020a6000350416630b2e7423811461011d5780631554611f1461013f5780631e891c0a146101515780631f6eb6e71461016657806320ea253314610192578063681617c71461021657806368b8c5a114610234578063793c0fd4146102565780638422927d14610279578063846a5dde1461028e5780638da5cb5b146102a657806392e4b8a4146102d2578063a0927a6a146102e7578063a3912ec8146103d5578063a6f9dae1146103df578063b2ca3ec4146103fd578063bb2a51d114610429578063d085835a14610447578063d8528af014610469578063da4793ac14610499578063ea8a66c7146104ae578063f5b61230146104d0575b61011b5b6101186104fc565b5b565b005b341561012557fe5b61012d61053e565b60408051918252519081900360200190f35b341561014757fe5b61011b610544565b005b341561015957fe5b61011b6004356105f1565b005b341561016e57fe5b610176610627565b60408051600160a060020a039092168252519081900360200190f35b341561019a57fe5b61012d600480803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284375094965050843594600160a060020a036020820135169450604081013593506060013591506106369050565b60408051918252519081900360200190f35b341561021e57fe5b61011b600160a060020a036004351661079e565b005b341561023c57fe5b61012d6107f7565b60408051918252519081900360200190f35b341561025e57fe5b61011b600160a060020a036004351660243515156107fe565b005b341561028157fe5b61011b60043561087c565b005b341561029657fe5b61011b600435602435610936565b005b34156102ae57fe5b6101766109f0565b60408051600160a060020a039092168252519081900360200190f35b34156102da57fe5b61011b6004356109ff565b005b34156102ef57fe5b6102fa600435610b85565b60408051602081018a9052600160a060020a03808a169282019290925260608101889052861515608082015285151560a082015290841660c082015260e081018390526101008082018390526101208083528b546002600182161590930260001901169190910490820181905281906101408201908c9080156103be5780601f10610393576101008083540402835291602001916103be565b820191906000526020600020905b8154815290600101906020018083116103a157829003601f168201915b50509a505050505050505050505060405180910390f35b61011b6104fc565b005b34156103e757fe5b61011b600160a060020a0360043516610bf2565b005b341561040557fe5b610176610c5f565b60408051600160a060020a039092168252519081900360200190f35b341561043157fe5b61011b600160a060020a0360043516610c6e565b005b341561044f57fe5b61012d610caa565b60408051918252519081900360200190f35b341561047157fe5b610485600160a060020a0360043516610cb0565b604080519115158252519081900360200190f35b34156104a157fe5b61011b600435610cc5565b005b34156104b657fe5b61012d610ceb565b60408051918252519081900360200190f35b34156104d857fe5b610176610cf1565b60408051600160a060020a039092168252519081900360200190f35b604080513481529051600160a060020a033316917f1e57e3bb474320be3d2c77138f75b7c3941292d647f5f9634e33a8e94e0e069b919081900360200190a25b565b60075481565b60015460009033600160a060020a03908116911614801590610575575060005433600160a060020a03908116911614155b156105805760006000fd5b50600254604051600160a060020a033081163192169082156108fc029083906000818181858888f1935050505015156105b95760006000fd5b6040805182815290517f3a7a1ba90aaa86fa9f6b921c3d600a5c870f8ebd05e7fbd30f93930f3caa5db59181900360200190a15b5b50565b60005433600160a060020a0390811691161461060d5760006000fd5b60055481101561061d5760006000fd5b60068190555b5b50565b600154600160a060020a031681565b600160a060020a0333166000908152600860205260408120548190819060ff1615156106625760006000fd5b60038054925082906106779060018301610d00565b50600380548390811061068657fe5b906000526020600020906007020160005b50600281018054600160a060020a03191633600160a060020a03161790559050670de0b6b3a76400008411156106cd5760006000fd5b6006548410156106e15760065442016106e5565b8342015b600382015560048101805475ffffffffffffffffffffffffffffffffffffffff0000191662010000600160a060020a0389160217905560058101859055875161073490829060208b0190610d32565b5060018101879055600481015460058201546040805191825251600160a060020a0362010000909304929092169184917f47e9633c99dd05fabd1b937e7c85f9e00d6866bfd2e5885e0091f40a173be3d3919081900360200190a38192505b505095945050505050565b60015433600160a060020a039081169116148015906107cc575060005433600160a060020a03908116911614155b156107d75760006000fd5b60018054600160a060020a031916600160a060020a0383161790555b5b50565b6003545b90565b60005433600160a060020a0390811691161461081a5760006000fd5b600160a060020a038216600081815260086020908152604091829020805460ff1916851515908117909155825190815291517f801f568efbc3346a6ae3d0c3eb335a30d64e0d3cf08f1c39626d62cd5c8272819281900390910190a25b5b5050565b6000805433600160a060020a039081169116146108995760006000fd5b60035482106108a85760006000fd5b60038054839081106108b657fe5b906000526020600020906007020160005b50600481015490915060ff16156108de5760006000fd5b6004810154610100900460ff16156108f65760006000fd5b60048101805460ff1916600117905560405182907ffdf197ed54809861dafe0b4d391843652730ac67274c1e9e46db7687dccaa30190600090a25b5b5050565b60045460009033600160a060020a039081169116146109555760006000fd5b60035483106109645760006000fd5b670de0b6b3a764000082111561097a5760006000fd5b600380548490811061098857fe5b906000526020600020906007020160005b5090506007548282600601540111806109bb57506004810154610100900460ff165b806109ca5750600481015460ff165b156109d55760006000fd5b60068101805483019055600381018054830190555b5b505050565b600054600160a060020a031681565b6003546000908210610a115760006000fd5b6003805483908110610a1f57fe5b906000526020600020906007020160005b50600481015490915033600160a060020a03908116620100009092041614610a585760006000fd5b6002810154600160a060020a031660009081526008602052604090205460ff161515610a845760006000fd5b8060030154421015610a965760006000fd5b600481015460ff1615610aa95760006000fd5b6004810154610100900460ff1615610ac15760006000fd5b806005015430600160a060020a0316311015610add5760006000fd5b60048101805461010061ff00199091161790819055600582015460405162010000909204600160a060020a0316916108fc82150291906000818181858888f193505050501515610b2d5760006000fd5b600481015460058201546040805191825251600160a060020a0362010000909304929092169184917f7f5bfe3018715b26a7067888a5c42912fbb3485170b8154ea9a448661f2f0de2919081900360200190a35b5050565b6003805482908110610b9357fe5b906000526020600020906007020160005b506001810154600282015460038301546004840154600585015460068601549596509394600160a060020a0393841694929360ff808416946101008504909116936201000090049091169189565b60005433600160a060020a03908116911614610c0e5760006000fd5b60008054600160a060020a031916600160a060020a038381169182178355604051919233909116917f70aea8d848e8a90fb7661b227dc522eb6395c3dac71b63cb59edd5c9899b23649190a35b5b50565b600454600160a060020a031681565b60005433600160a060020a03908116911614610c8a5760006000fd5b60048054600160a060020a031916600160a060020a0383161790555b5b50565b60065481565b60086020526000908152604090205460ff1681565b60005433600160a060020a03908116911614610ce15760006000fd5b60078190555b5b50565b60055481565b600254600160a060020a031681565b8154818355818115116109ea576007028160070283600052602060002091820191016109ea9190610db1565b5b505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10610d7357805160ff1916838001178555610da0565b82800160010185558215610da0579182015b82811115610da0578251825591602001919060010190610d85565b5b50610dad929150610e2a565b5090565b6107fb91905b80821115610dad576000610dcb8282610e4b565b50600060018201819055600282018054600160a060020a03191690556003820181905560048201805475ffffffffffffffffffffffffffffffffffffffffffff19169055600582018190556006820155600701610db7565b5090565b90565b6107fb91905b80821115610dad5760008155600101610e30565b5090565b90565b50805460018160011615610100020316600290046000825580601f10610e7157506105ed565b601f0160209004906000526020600020908101906105ed9190610e2a565b5b505600a165627a7a72305820dd8149b751b405b692f95feb08ecb20f6a9994da768ce4427a7aa1d30c3ea2f30029

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

000000000000000000000000839395e20bbb182fa440d08f850e6c7a8f6f078000000000000000000000000032bacc8b241fb172fee18bda32527126c6f3c5f70000000000000000000000000000000000000000000000000000000000000e100000000000000000000000000000000000000000000000000000000000015180000000000000000000000000839395e20bbb182fa440d08f850e6c7a8f6f07800000000000000000000000000000000000000000000000000000000000127500

-----Decoded View---------------
Arg [0] : _escapeHatchCaller (address): 0x839395e20bbB182fa440d08F850E6c7A8f6F0780
Arg [1] : _escapeHatchDestination (address): 0x32bacc8B241FB172fEE18bDa32527126c6f3c5f7
Arg [2] : _absoluteMinTimeLock (uint256): 3600
Arg [3] : _timeLock (uint256): 86400
Arg [4] : _securityGuard (address): 0x839395e20bbB182fa440d08F850E6c7A8f6F0780
Arg [5] : _maxSecurityGuardDelay (uint256): 1209600

-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 000000000000000000000000839395e20bbb182fa440d08f850e6c7a8f6f0780
Arg [1] : 00000000000000000000000032bacc8b241fb172fee18bda32527126c6f3c5f7
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000e10
Arg [3] : 0000000000000000000000000000000000000000000000000000000000015180
Arg [4] : 000000000000000000000000839395e20bbb182fa440d08f850e6c7a8f6f0780
Arg [5] : 0000000000000000000000000000000000000000000000000000000000127500


Swarm Source

bzzr://dd8149b751b405b692f95feb08ecb20f6a9994da768ce4427a7aa1d30c3ea2f3

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ 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.