Contract 0x27BD6D1f438692F72CF082A62ACdB45855869e29

 
Txn Hash
Method
Block
From
To
Value
0x49f0415bb73821030a5d967383d7f138f31157b2e4549d3fe91dad68ccd3acfc0x6080604063897562018-09-24 8:28:161462 days 8 hrs ago0x7c01eb2f7f98eef60447bf620136d2dfa9ee5420 IN  Contract Creation0 Ether0.0181164310
[ Download CSV Export 
Parent Txn Hash Block From To Value
Loading

Similar Match Source Code
Note: This contract matches the deployed ByteCode of the Source Code for Contract 0xfa9441c7ee6289f5bfcf07d7cc29338a715ed2cb

Contract Name:
ShareholderDAO

Compiler Version
v0.4.25+commit.59dbf8f1

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion
/**
 *Submitted for verification at Etherscan.io on 2018-09-24
*/

/**
 * Copyright (c) 2018 blockimmo AG [email protected]
 * Non-Profit Open Software License 3.0 (NPOSL-3.0)
 * https://opensource.org/licenses/NPOSL-3.0
 */


pragma solidity 0.4.25;


/**
 * @title SafeMath
 * @dev Math operations with safety checks that throw on error
 */
library SafeMath {

  /**
  * @dev Multiplies two numbers, throws on overflow.
  */
  function mul(uint256 _a, uint256 _b) internal pure returns (uint256 c) {
    // Gas optimization: this is cheaper than asserting 'a' not being zero, but the
    // benefit is lost if 'b' is also tested.
    // See: https://github.com/OpenZeppelin/openzeppelin-solidity/pull/522
    if (_a == 0) {
      return 0;
    }

    c = _a * _b;
    assert(c / _a == _b);
    return c;
  }

  /**
  * @dev Integer division of two numbers, truncating the quotient.
  */
  function div(uint256 _a, uint256 _b) internal pure returns (uint256) {
    // assert(_b > 0); // Solidity automatically throws when dividing by 0
    // uint256 c = _a / _b;
    // assert(_a == _b * c + _a % _b); // There is no case in which this doesn't hold
    return _a / _b;
  }

  /**
  * @dev Subtracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend).
  */
  function sub(uint256 _a, uint256 _b) internal pure returns (uint256) {
    assert(_b <= _a);
    return _a - _b;
  }

  /**
  * @dev Adds two numbers, throws on overflow.
  */
  function add(uint256 _a, uint256 _b) internal pure returns (uint256 c) {
    c = _a + _b;
    assert(c >= _a);
    return c;
  }
}


contract LandRegistryProxyInterface {
  function owner() public view returns (address);
}


contract TokenizedPropertyInterface {
  function balanceOf(address _who) public view returns (uint256);
  function emitGenericProposal(string _generic) public;
  function lastTransferBlock(address _account) public view returns (uint256);
  function registryProxy() public view returns (LandRegistryProxyInterface);
  function setManagementCompany(string _managementCompany) public;
  function totalSupply() public view returns (uint256);
  function transferOwnership(address _newOwner) public;
  function untokenize() public;
}


/**
 * @title ShareholderDAO
 * @dev A simple DAO attached to a `TokenizedProperty` (ownership of the property is transferred to `this`).
 *
 * The token holders of a property `extend` and `vote` on `Proposal`s which are either executed (over 50% consensus) or rejected.
 * Proposals are `Executed` or `Rejected` at or after their `closingTime`, when a token holder or blockimmo calls `finalize` on the proposal.
 * Generic information related to a proposal can be included in the `_generic` string (ie the configuration details of an outright sale's `TokenSale`).
 * `Generic` proposals can also be extended. A property's management company and / or blockimmo will try to take these as suggestions.
 *
 * There are only a few decisions that token holders (investors in a property) can (and need) to make.
 * No need to be general. We keep it simple and minimal here, enabling our users to accomplish the necessary tasks.
 * - nothing more, nothing less.
 *
 * Just like in the real world, for commercial investment properties a `managementCompany` makes all decisions / actions involving a property.
 * Investors only need to `SetManagementCompany` - a suggestion blockimmo will always take (if possible).
 *
 * Aside from that, the only decisions investors need to make are:
 *
 * `TransferOwnership` enables `this` to be easily and reliably upgraded if consensus is reached on this proposal (ie a different form of DAO or a BDFL).
 *
 * Upgrading:
 *   1. A token holder deploys a new `ShareholderDAO`
 *   2. The token holder extends a proposal to `transferOwnership` of `TokenizedProperty` to the new DAO (1).
 *
 * See `TokenizedProperty`'s documentation for info on `Untokenize` and how / why this is used.
 */
contract ShareholderDAO {
  using SafeMath for uint256;

  enum Actions { SetManagementCompany, TransferOwnership, Untokenize, Generic }
  enum Outcomes { Pend, Accept, Reject }
  enum ProposalStatus { Null, Executed, Open, Rejected }
  enum VoteStatus { Null, For, Against}

  struct Vote {
    VoteStatus status;
    uint256 clout;
  }

  struct Proposal {
    Actions action;
    uint256 closingTime;

    string managementCompany;
    address owner;
    string generic;

    address proposer;

    ProposalStatus status;
    uint256 tallyFor;
    uint256 tallyAgainst;
    uint256 blockNumber;

    mapping (address => Vote) voters;
  }

  mapping(bytes32 => Proposal) private proposals;
  TokenizedPropertyInterface public property;

  event ProposalRejected(bytes32 indexed proposal);
  event ProposalExecuted(bytes32 indexed proposal);
  event ProposalExtended(bytes32 indexed proposal, Actions indexed action, uint256 closingTime, string managementCompany, address owner, string generic, address indexed proposer);

  event Voted(bytes32 indexed proposal, address indexed voter, uint256 clout);
  event VoteRescinded(bytes32 indexed proposal, address indexed voter, uint256 clout);

  constructor(TokenizedPropertyInterface _property) public {
    property = _property;
  }

  modifier isAuthorized {
    require(getClout(msg.sender) > 0 || msg.sender == property.registryProxy().owner(), "must be blockimmo or tokenholder to perform this action");  // allow blockimmo to extend proposals for all properties
    _;
  }

  function extendProposal(Actions _action, uint256 _closingTime, string _managementCompany, address _owner, string _description) public isAuthorized {
    require(block.timestamp < _closingTime, "_closingTime must be in the future");

    bytes32 hash = keccak256(abi.encodePacked(_action, _closingTime, _managementCompany, _description, _owner));
    require(proposals[hash].status == ProposalStatus.Null, "proposal is not unique");

    proposals[hash] = Proposal(_action, _closingTime, _managementCompany, _owner, _description, msg.sender, ProposalStatus.Open, 0, 0, block.number);
    emit ProposalExtended(hash, _action, _closingTime, _managementCompany, _owner, _description, msg.sender);
  }

  function vote(bytes32 _hash, bool _isFor) public isAuthorized {
    Proposal storage p = proposals[_hash];
    Vote storage v = p.voters[msg.sender];

    require(p.status == ProposalStatus.Open, "vote requires proposal is open");
    require(block.timestamp < p.closingTime, "vote requires proposal voting period is open");
    require(p.voters[msg.sender].status == VoteStatus.Null, "voter has voted");
    require(p.blockNumber > property.lastTransferBlock(msg.sender), "voter ineligible due to transfer in voting period");

    uint256 clout = getClout(msg.sender);
    v.clout = clout;
    if (_isFor) {
      v.status = VoteStatus.For;
      p.tallyFor = p.tallyFor.add(clout);
    } else {
      v.status = VoteStatus.Against;
      p.tallyAgainst = p.tallyAgainst.add(clout);
    }

    emit Voted(_hash, msg.sender, clout);
  }

  function rescindVote(bytes32 _hash) public isAuthorized {
    Proposal storage p = proposals[_hash];
    Vote storage v = p.voters[msg.sender];

    require(p.status == ProposalStatus.Open, "rescindVote requires proposal is open");
    require(block.timestamp < p.closingTime, "rescindVote requires proposal voting period is open");
    require(v.status != VoteStatus.Null, "voter has not voted");

    uint256 clout = v.clout;
    if (v.status == VoteStatus.For) {
      p.tallyFor = p.tallyFor.sub(clout);
    } else if (v.status == VoteStatus.Against) {
      p.tallyAgainst = p.tallyAgainst.sub(clout);
    }

    v.status = VoteStatus.Null;
    v.clout = 0;

    emit VoteRescinded(_hash, msg.sender, clout);
  }

  function finalize(bytes32 _hash) public isAuthorized {
    Proposal storage p = proposals[_hash];

    require(p.status == ProposalStatus.Open, "finalize requires proposal is open");
    require(block.timestamp >= p.closingTime, "finalize requires proposal voting period is closed");

    Outcomes outcome = tallyVotes(p.tallyFor);
    if (outcome == Outcomes.Accept) {
      executeProposal(_hash);
    } else if (outcome == Outcomes.Reject) {
      p.status = ProposalStatus.Rejected;
      emit ProposalRejected(_hash);
    }
  }

  function getClout(address _who) internal view returns (uint256 clout) {
    clout = property.balanceOf(_who);
  }

  function tallyVotes(uint256 _tallyFor) internal view returns (Outcomes outcome) {
    if (_tallyFor > property.totalSupply() / 2) {
      outcome = Outcomes.Accept;
    } else {
      outcome = Outcomes.Reject;
    }
  }

  function executeProposal(bytes32 _hash) internal {
    Proposal storage p = proposals[_hash];

    if (p.action == Actions.SetManagementCompany) {
      property.setManagementCompany(p.managementCompany);
    } else if (p.action == Actions.TransferOwnership) {
      property.transferOwnership(p.owner);
    } else if (p.action == Actions.Untokenize) {
      property.untokenize();
    } else if (p.action == Actions.Generic) {
      property.emitGenericProposal(p.generic);
    }

    p.status = ProposalStatus.Executed;
    emit ProposalExecuted(_hash);
  }
}

Contract Security Audit

Contract ABI

[{"constant":true,"inputs":[],"name":"property","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_action","type":"uint8"},{"name":"_closingTime","type":"uint256"},{"name":"_managementCompany","type":"string"},{"name":"_owner","type":"address"},{"name":"_description","type":"string"}],"name":"extendProposal","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_hash","type":"bytes32"}],"name":"finalize","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_hash","type":"bytes32"},{"name":"_isFor","type":"bool"}],"name":"vote","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_hash","type":"bytes32"}],"name":"rescindVote","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[{"name":"_property","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"proposal","type":"bytes32"}],"name":"ProposalRejected","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"proposal","type":"bytes32"}],"name":"ProposalExecuted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"proposal","type":"bytes32"},{"indexed":true,"name":"action","type":"uint8"},{"indexed":false,"name":"closingTime","type":"uint256"},{"indexed":false,"name":"managementCompany","type":"string"},{"indexed":false,"name":"owner","type":"address"},{"indexed":false,"name":"generic","type":"string"},{"indexed":true,"name":"proposer","type":"address"}],"name":"ProposalExtended","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"proposal","type":"bytes32"},{"indexed":true,"name":"voter","type":"address"},{"indexed":false,"name":"clout","type":"uint256"}],"name":"Voted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"proposal","type":"bytes32"},{"indexed":true,"name":"voter","type":"address"},{"indexed":false,"name":"clout","type":"uint256"}],"name":"VoteRescinded","type":"event"}]

608060405234801561001057600080fd5b50604051602080611a1c833981016040525160018054600160a060020a031916600160a060020a039092169190911790556119cc806100506000396000f3006080604052600436106100535763ffffffff60e060020a600035041663176fd3f08114610058578063279457591461008957806392584d801461013b5780639f2ce67814610153578063e682c9ea14610170575b600080fd5b34801561006457600080fd5b5061006d610188565b60408051600160a060020a039092168252519081900360200190f35b34801561009557600080fd5b50604080516020600460443581810135601f810184900484028501840190955284845261013994823560ff1694602480359536959460649492019190819084018382808284375050604080516020601f818a01358b0180359182018390048302840183018552818452989b600160a060020a038b35169b909a9099940197509195509182019350915081908401838280828437509497506101979650505050505050565b005b34801561014757600080fd5b5061013960043561083e565b34801561015f57600080fd5b506101396004356024351515610b7f565b34801561017c57600080fd5b5061013960043561101f565b600154600160a060020a031681565b6000806101a3336113e8565b11806102a85750600160009054906101000a9004600160a060020a0316600160a060020a031663218d984b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b1580156101fd57600080fd5b505af1158015610211573d6000803e3d6000fd5b505050506040513d602081101561022757600080fd5b50516040805160e060020a638da5cb5b0281529051600160a060020a0390921691638da5cb5b916004808201926020929091908290030181600087803b15801561027057600080fd5b505af1158015610284573d6000803e3d6000fd5b505050506040513d602081101561029a57600080fd5b5051600160a060020a031633145b1515610300576040805160e560020a62461bcd02815260206004820152603760248201526000805160206119818339815191526044820152600080516020611961833981519152606482015290519081900360840190fd5b42851161037d576040805160e560020a62461bcd02815260206004820152602260248201527f5f636c6f73696e6754696d65206d75737420626520696e20746865206675747560448201527f7265000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b85858584866040516020018086600381111561039557fe5b60ff167f010000000000000000000000000000000000000000000000000000000000000002815260010185815260200184805190602001908083835b602083106103f05780518252601f1990920191602091820191016103d1565b51815160209384036101000a600019018019909216911617905286519190930192860191508083835b602083106104385780518252601f199092019160209182019101610419565b6001836020036101000a03801982511681845116808217855250505050505090500182600160a060020a0316600160a060020a03166c01000000000000000000000000028152601401955050505050506040516020818303038152906040526040518082805190602001908083835b602083106104c65780518252601f1990920191602091820191016104a7565b5181516020939093036101000a600019018019909116921691909117905260405192018290039091209350600092506104fd915050565b60008281526020819052604090206005015460a060020a900460ff16600381111561052457fe5b14610579576040805160e560020a62461bcd02815260206004820152601660248201527f70726f706f73616c206973206e6f7420756e6971756500000000000000000000604482015290519081900360640190fd5b6101406040519081016040528087600381111561059257fe5b81526020810187905260408101869052600160a060020a0385166060820152608081018490523360a082015260c00160028152600060208083018290526040808401839052436060909401939093528482528190522081518154829060ff1916600183600381111561060057fe5b021790555060208281015160018301556040830151805161062792600285019201906118c5565b50606082015160038201805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a03909216919091179055608082015180516106769160048401916020909101906118c5565b5060a082015160058201805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a039092169190911780825560c0840151919074ff0000000000000000000000000000000000000000191660a060020a8360038111156106db57fe5b021790555060e082015160068201556101008201516007820155610120909101516008909101553386600381111561070f57fe5b82600019167f7d21fa48f522565bc676bea88d40d0b515b264bd1d3168a4cf78fdebddcc5c1f88888888604051808581526020018060200184600160a060020a0316600160a060020a0316815260200180602001838103835286818151815260200191508051906020019080838360005b83811015610798578181015183820152602001610780565b50505050905090810190601f1680156107c55780820380516001836020036101000a031916815260200191505b50838103825284518152845160209182019186019080838360005b838110156107f85781810151838201526020016107e0565b50505050905090810190601f1680156108255780820380516001836020036101000a031916815260200191505b50965050505050505060405180910390a4505050505050565b600080600061084c336113e8565b11806109515750600160009054906101000a9004600160a060020a0316600160a060020a031663218d984b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b1580156108a657600080fd5b505af11580156108ba573d6000803e3d6000fd5b505050506040513d60208110156108d057600080fd5b50516040805160e060020a638da5cb5b0281529051600160a060020a0390921691638da5cb5b916004808201926020929091908290030181600087803b15801561091957600080fd5b505af115801561092d573d6000803e3d6000fd5b505050506040513d602081101561094357600080fd5b5051600160a060020a031633145b15156109a9576040805160e560020a62461bcd02815260206004820152603760248201526000805160206119818339815191526044820152600080516020611961833981519152606482015290519081900360840190fd5b600083815260208190526040902091506002600583015460a060020a900460ff1660038111156109d557fe5b14610a50576040805160e560020a62461bcd02815260206004820152602260248201527f66696e616c697a652072657175697265732070726f706f73616c206973206f7060448201527f656e000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b6001820154421015610ad2576040805160e560020a62461bcd02815260206004820152603260248201527f66696e616c697a652072657175697265732070726f706f73616c20766f74696e60448201527f6720706572696f6420697320636c6f7365640000000000000000000000000000606482015290519081900360840190fd5b610adf8260060154611485565b90506001816002811115610aef57fe5b1415610b0357610afe8361152a565b610b7a565b6002816002811115610b1157fe5b1415610b7a5760058201805474ff000000000000000000000000000000000000000019167403000000000000000000000000000000000000000017905560405183907f55295d4ce992922fa2e5ffbf3a3dcdb367de0a15e125ace083456017fd22060f90600090a25b505050565b600080600080610b8e336113e8565b1180610c935750600160009054906101000a9004600160a060020a0316600160a060020a031663218d984b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015610be857600080fd5b505af1158015610bfc573d6000803e3d6000fd5b505050506040513d6020811015610c1257600080fd5b50516040805160e060020a638da5cb5b0281529051600160a060020a0390921691638da5cb5b916004808201926020929091908290030181600087803b158015610c5b57600080fd5b505af1158015610c6f573d6000803e3d6000fd5b505050506040513d6020811015610c8557600080fd5b5051600160a060020a031633145b1515610ceb576040805160e560020a62461bcd02815260206004820152603760248201526000805160206119818339815191526044820152600080516020611961833981519152606482015290519081900360840190fd5b6000858152602081815260408083203384526009810190925290912090935091506002600584015460a060020a900460ff166003811115610d2857fe5b14610d7d576040805160e560020a62461bcd02815260206004820152601e60248201527f766f74652072657175697265732070726f706f73616c206973206f70656e0000604482015290519081900360640190fd5b60018301544210610dfe576040805160e560020a62461bcd02815260206004820152602c60248201527f766f74652072657175697265732070726f706f73616c20766f74696e6720706560448201527f72696f64206973206f70656e0000000000000000000000000000000000000000606482015290519081900360840190fd5b33600090815260098401602052604081205460ff166002811115610e1e57fe5b14610e73576040805160e560020a62461bcd02815260206004820152600f60248201527f766f7465722068617320766f7465640000000000000000000000000000000000604482015290519081900360640190fd5b600154604080517f8712523e0000000000000000000000000000000000000000000000000000000081523360048201529051600160a060020a0390921691638712523e916024808201926020929091908290030181600087803b158015610ed957600080fd5b505af1158015610eed573d6000803e3d6000fd5b505050506040513d6020811015610f0357600080fd5b5051600884015411610f85576040805160e560020a62461bcd02815260206004820152603160248201527f766f74657220696e656c696769626c652064756520746f207472616e7366657260448201527f20696e20766f74696e6720706572696f64000000000000000000000000000000606482015290519081900360840190fd5b610f8e336113e8565b6001830181905590508315610fc157815460ff191660011782556006830154610fb790826118a0565b6006840155610fe1565b815460ff191660021782556007830154610fdb90826118a0565b60078401555b604080518281529051339187917fe4abc5380fa6939d1dc23b5e90b3a8a0e328f0f1a82a5f42bfb795bf9c7175059181900360200190a35050505050565b60008060008061102e336113e8565b11806111335750600160009054906101000a9004600160a060020a0316600160a060020a031663218d984b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801561108857600080fd5b505af115801561109c573d6000803e3d6000fd5b505050506040513d60208110156110b257600080fd5b50516040805160e060020a638da5cb5b0281529051600160a060020a0390921691638da5cb5b916004808201926020929091908290030181600087803b1580156110fb57600080fd5b505af115801561110f573d6000803e3d6000fd5b505050506040513d602081101561112557600080fd5b5051600160a060020a031633145b151561118b576040805160e560020a62461bcd02815260206004820152603760248201526000805160206119818339815191526044820152600080516020611961833981519152606482015290519081900360840190fd5b6000848152602081815260408083203384526009810190925290912090935091506002600584015460a060020a900460ff1660038111156111c857fe5b14611243576040805160e560020a62461bcd02815260206004820152602560248201527f72657363696e64566f74652072657175697265732070726f706f73616c20697360448201527f206f70656e000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600183015442106112c4576040805160e560020a62461bcd02815260206004820152603360248201527f72657363696e64566f74652072657175697265732070726f706f73616c20766f60448201527f74696e6720706572696f64206973206f70656e00000000000000000000000000606482015290519081900360840190fd5b6000825460ff1660028111156112d657fe5b141561132c576040805160e560020a62461bcd02815260206004820152601360248201527f766f74657220686173206e6f7420766f74656400000000000000000000000000604482015290519081900360640190fd5b5060018082015490825460ff16600281111561134457fe5b141561136957600683015461135f908263ffffffff6118b316565b600684015561139c565b6002825460ff16600281111561137b57fe5b141561139c576007830154611396908263ffffffff6118b316565b60078401555b815460ff1916825560006001830155604080518281529051339186917f9f3b6b5f80500a9952b9b3b2099252be06f8ea5bf959b7a36d5cbeac8f07f56d9181900360200190a350505050565b600154604080517f70a08231000000000000000000000000000000000000000000000000000000008152600160a060020a038481166004830152915160009392909216916370a082319160248082019260209290919082900301818787803b15801561145357600080fd5b505af1158015611467573d6000803e3d6000fd5b505050506040513d602081101561147d57600080fd5b505192915050565b60006002600160009054906101000a9004600160a060020a0316600160a060020a03166318160ddd6040518163ffffffff1660e060020a028152600401602060405180830381600087803b1580156114dc57600080fd5b505af11580156114f0573d6000803e3d6000fd5b505050506040513d602081101561150657600080fd5b505181151561151157fe5b0482111561152157506001611525565b5060025b919050565b600081815260208190526040812090815460ff16600381111561154957fe5b141561164b57600180546040517fc3e2087c000000000000000000000000000000000000000000000000000000008152602060048201908152600280860180546000199681161561010002969096019095160460248301819052600160a060020a039093169363c3e2087c93909282916044909101908490801561160e5780601f106115e35761010080835404028352916020019161160e565b820191906000526020600020905b8154815290600101906020018083116115f157829003601f168201915b505092505050600060405180830381600087803b15801561162e57600080fd5b505af1158015611642573d6000803e3d6000fd5b5050505061184b565b6001815460ff16600381111561165d57fe5b14156116cf576001546003820154604080517ff2fde38b000000000000000000000000000000000000000000000000000000008152600160a060020a0392831660048201529051919092169163f2fde38b91602480830192600092919082900301818387803b15801561162e57600080fd5b6002815460ff1660038111156116e157fe5b141561173a57600160009054906101000a9004600160a060020a0316600160a060020a0316632d6d16466040518163ffffffff1660e060020a028152600401600060405180830381600087803b15801561162e57600080fd5b6003815460ff16600381111561174c57fe5b141561184b57600180546040517fe5e5e5d600000000000000000000000000000000000000000000000000000000815260206004828101918252850180546002600019968216156101000296909601169490940460248301819052600160a060020a039093169363e5e5e5d69390928291604490910190849080156118125780601f106117e757610100808354040283529160200191611812565b820191906000526020600020905b8154815290600101906020018083116117f557829003601f168201915b505092505050600060405180830381600087803b15801561183257600080fd5b505af1158015611846573d6000803e3d6000fd5b505050505b60058101805474ff0000000000000000000000000000000000000000191660a060020a17905560405182907f7b1bcf1ccf901a11589afff5504d59fd0a53780eed2a952adade0348985139e090600090a25050565b818101828110156118ad57fe5b92915050565b6000828211156118bf57fe5b50900390565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061190657805160ff1916838001178555611933565b82800160010185558215611933579182015b82811115611933578251825591602001919060010190611918565b5061193f929150611943565b5090565b61195d91905b8082111561193f5760008155600101611949565b90560020746f20706572666f726d207468697320616374696f6e0000000000000000006d75737420626520626c6f636b696d6d6f206f7220746f6b656e686f6c646572a165627a7a72305820b1ad592dfc74ffcec16fda27ac301a0308d9d305d1dc3f510b2620de98498bfe0029000000000000000000000000caa5d787b5ecb5a560c30a2396dd214f3c701220

Swarm Source

bzzr://b1ad592dfc74ffcec16fda27ac301a0308d9d305d1dc3f510b2620de98498bfe
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.