Contract Overview
Balance: 0 Ether
Transactions: 81116 txns
 Latest 25 transactions from a total of 81116 transactions

TxHash Age From To Value [TxFee]
0xbf2d71af697faceb82ccb55e794a1ce200f8a28a5a835281f21c8d604163d2881 min ago0x4487f27ad58abbf8f3b25ee38aba578bc979f67e  IN   0x2f60bb2bbe14f1dfd8146a1469f300a9c313cae10 Ether0.000094029
0xeb39423f0b64fc510feb74c3b62d55844390d53c19f732736568de6f7889fb112 mins ago0x4487f27ad58abbf8f3b25ee38aba578bc979f67e  IN   0x2f60bb2bbe14f1dfd8146a1469f300a9c313cae10 Ether0.000094029
0x6d107389b32c8558be219e04fc96a8c895ddd271fc04e50453affbb43f468f022 mins ago0x4487f27ad58abbf8f3b25ee38aba578bc979f67e  IN   0x2f60bb2bbe14f1dfd8146a1469f300a9c313cae10 Ether0.000094029
0x457ee108d195bf518b13de4e41b6b1822a0c3f18381cbc9969432290edd461dd2 mins ago0x4487f27ad58abbf8f3b25ee38aba578bc979f67e  IN   0x2f60bb2bbe14f1dfd8146a1469f300a9c313cae10 Ether0.000094029
0x95c76f864b954896f32854f292df40dd831ce354e123529509d1d2e6772312312 mins ago0x4487f27ad58abbf8f3b25ee38aba578bc979f67e  IN   0x2f60bb2bbe14f1dfd8146a1469f300a9c313cae10 Ether0.000094029
0x18a8555275232e5b39514a3750b373a19cba7729dfd08dbfba55e22eb270b90a2 mins ago0x4487f27ad58abbf8f3b25ee38aba578bc979f67e  IN   0x2f60bb2bbe14f1dfd8146a1469f300a9c313cae10 Ether0.000094029
0x211d710cdd32748f119b977870abec150fc987318e1c11fa17b754a2c9351fba2 mins ago0x4487f27ad58abbf8f3b25ee38aba578bc979f67e  IN   0x2f60bb2bbe14f1dfd8146a1469f300a9c313cae10 Ether0.000094029
0xbdacc582ff7dea0ace26b830ea8b32b7043f35e97491ab7e2cf4c818f0dc15e02 mins ago0x4487f27ad58abbf8f3b25ee38aba578bc979f67e  IN   0x2f60bb2bbe14f1dfd8146a1469f300a9c313cae10 Ether0.000094029
0x37897e403e919802122a9d3981ec576ae0855db90de53c53e292a3d4d3e767cb2 mins ago0x4487f27ad58abbf8f3b25ee38aba578bc979f67e  IN   0x2f60bb2bbe14f1dfd8146a1469f300a9c313cae10 Ether0.000093965
0x257b3c4dc74ccfba0b796aa8edb64668c0398dbee44b6d628054661dd3904a5b2 mins ago0x4487f27ad58abbf8f3b25ee38aba578bc979f67e  IN   0x2f60bb2bbe14f1dfd8146a1469f300a9c313cae10 Ether0.000094029
0x523fb60cacad52bd799c1e1c9505afa7c53d45b312be049247cb5afc3b9d9f872 mins ago0x4487f27ad58abbf8f3b25ee38aba578bc979f67e  IN   0x2f60bb2bbe14f1dfd8146a1469f300a9c313cae10 Ether0.000094029
0xb889b7ed36819b090a7fa606df38f384ce1843416e110a04bf69e13aa546a1462 mins ago0x4487f27ad58abbf8f3b25ee38aba578bc979f67e  IN   0x2f60bb2bbe14f1dfd8146a1469f300a9c313cae10 Ether0.000094029
0x73842de106543d3cdb89509740095f38fb05181347c44f43144df841402d81ad2 mins ago0x4487f27ad58abbf8f3b25ee38aba578bc979f67e  IN   0x2f60bb2bbe14f1dfd8146a1469f300a9c313cae10 Ether0.000094029
0x6a7a6cdf3ccb6b1df1f9dac0b6207f9fff3c6b6e339c2f97b5a64de560d97db323 mins ago0x4487f27ad58abbf8f3b25ee38aba578bc979f67e  IN   0x2f60bb2bbe14f1dfd8146a1469f300a9c313cae10 Ether0.000093965
0xb415ee4a88615466d94c5e2e09a82122d8fad99f77226b16bbbaa69a9cc010ca23 mins ago0x4487f27ad58abbf8f3b25ee38aba578bc979f67e  IN   0x2f60bb2bbe14f1dfd8146a1469f300a9c313cae10 Ether0.000094029
0x84c3d3fb25d65a84722f7f5307ba450cc37bab76e36a761e49a306a9802239de26 mins ago0x4487f27ad58abbf8f3b25ee38aba578bc979f67e  IN   0x2f60bb2bbe14f1dfd8146a1469f300a9c313cae10 Ether0.000094029
0xecb7ad0fff03fed4f5d1ec2252ded55a40ba6af14a19560ad41a6a12922c551627 mins ago0x4487f27ad58abbf8f3b25ee38aba578bc979f67e  IN   0x2f60bb2bbe14f1dfd8146a1469f300a9c313cae10 Ether0.000094029
0x11553ae2fddd0c6e966518f4ab9f7558619305c17f95c8d0077d12c241559ead30 mins ago0x4487f27ad58abbf8f3b25ee38aba578bc979f67e  IN   0x2f60bb2bbe14f1dfd8146a1469f300a9c313cae10 Ether0.000094029
0xe81af1e9ba66cdfd3be180b0c2c3a0d93e40b3e2f9080c34d4cd0a0bead535b131 mins ago0x4487f27ad58abbf8f3b25ee38aba578bc979f67e  IN   0x2f60bb2bbe14f1dfd8146a1469f300a9c313cae10 Ether0.000094029
0x616cd4d41d24c45018f6f96247e7e535a09af3db987b8ee6c050b75eb18405e331 mins ago0x4487f27ad58abbf8f3b25ee38aba578bc979f67e  IN   0x2f60bb2bbe14f1dfd8146a1469f300a9c313cae10 Ether0.000094029
0x3f3cbc59f26510922d7c07b9d83b1ac0019f53d8d776469403480e2a15f5d78335 mins ago0x4487f27ad58abbf8f3b25ee38aba578bc979f67e  IN   0x2f60bb2bbe14f1dfd8146a1469f300a9c313cae10 Ether0.000093965
0x6aaa9cf50c25a312e7f12223b0f19d77a202668c71c4ed25e1d2e5984eddaa8836 mins ago0x4487f27ad58abbf8f3b25ee38aba578bc979f67e  IN   0x2f60bb2bbe14f1dfd8146a1469f300a9c313cae10 Ether0.000094029
0xeb424fc46601dfdb391da5eddc6a503aaacc339f89178d65cbb9b4bddb7803b739 mins ago0x4487f27ad58abbf8f3b25ee38aba578bc979f67e  IN   0x2f60bb2bbe14f1dfd8146a1469f300a9c313cae10 Ether0.000093965
0x60f5078b80f37368b4562d1b83fd9d21d51dff7aa271d2502058d85e37ce174d40 mins ago0x4487f27ad58abbf8f3b25ee38aba578bc979f67e  IN   0x2f60bb2bbe14f1dfd8146a1469f300a9c313cae10 Ether0.000094029
0x5b4ac1a70b6aae2af6afe859b268db82d1e64ea65f1c2b1097d3db925fbfcd5f43 mins ago0x4487f27ad58abbf8f3b25ee38aba578bc979f67e  IN   0x2f60bb2bbe14f1dfd8146a1469f300a9c313cae10 Ether0.000094029
[ Download CSV Export  ] 
 Internal Transactions as a result of Contract Execution
View All
ParentTxHash Block Age From To Value
Warning: The Compiled Contract might be susceptible to ExpExponentCleanup (medium/high-severity), EventStructWrongData (very low-severity) SolidityCompiler Bugs.

Contract Source Code Verified (Similar Match)
Note: This contract matches the deployed ByteCode of the Verified Source Code for Contract 0xa1139aa10461b405f4816bedc194b06acae1fdda
Contract Name: Braided
Compiler Version: v0.4.24+commit.e67f0147
Optimization Enabled: Yes
Runs (Optimiser):  200



  Contract Source Code   Find Similiar Contracts

pragma solidity ^0.4.24;

// A common external interface to Braided contracts
interface BraidedInterface {
  function addStrand(uint, address, bytes32, string) external;
  function getStrandCount() external view returns (uint);
  function getStrandContract(uint) external view returns (address);
  function getStrandGenesisBlockHash(uint) external view returns (bytes32);
  function getStrandDescription(uint) external view returns (string);
  function addAgent(address, uint) external;
  function removeAgent(address, uint) external;
  function addBlock(uint, uint, bytes32) external;
  function getBlockHash(uint, uint) external view returns (bytes32);
  function getHighestBlockNumber(uint) external view returns (uint);
  function getPreviousBlockNumber(uint, uint) external view returns (uint);
  function getPreviousBlock(uint, uint) external view returns (uint, bytes32);
}

/**
 * @title Ownable
 * @dev The Ownable contract has an owner address, and provides basic authorization control
 * functions, this simplifies the implementation of "user permissions".
 */
contract Ownable {
  address public owner;


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


  /**
   * @dev The Ownable constructor sets the original `owner` of the contract to the sender
   * account.
   */
  constructor() public {
    owner = msg.sender;
  }

  /**
   * @dev Throws if called by any account other than the owner.
   */
  modifier onlyOwner() {
    require(msg.sender == owner);
    _;
  }

  /**
   * @dev Allows the current owner to relinquish control of the contract.
   * @notice Renouncing to ownership will leave the contract without an owner.
   * It will not be possible to call the functions with the `onlyOwner`
   * modifier anymore.
   */
  function renounceOwnership() public onlyOwner {
    emit OwnershipRenounced(owner);
    owner = address(0);
  }

  /**
   * @dev Allows the current owner to transfer control of the contract to a newOwner.
   * @param _newOwner The address to transfer ownership to.
   */
  function transferOwnership(address _newOwner) public onlyOwner {
    _transferOwnership(_newOwner);
  }

  /**
   * @dev Transfers control of the contract to a newOwner.
   * @param _newOwner The address to transfer ownership to.
   */
  function _transferOwnership(address _newOwner) internal {
    require(_newOwner != address(0));
    emit OwnershipTransferred(owner, _newOwner);
    owner = _newOwner;
  }
}

/**
 * @title Roles
 * @author Francisco Giordano (@frangio)
 * @dev Library for managing addresses assigned to a Role.
 * See RBAC.sol for example usage.
 */
library Roles {
  struct Role {
    mapping (address => bool) bearer;
  }

  /**
   * @dev give an address access to this role
   */
  function add(Role storage _role, address _addr)
    internal
  {
    _role.bearer[_addr] = true;
  }

  /**
   * @dev remove an address' access to this role
   */
  function remove(Role storage _role, address _addr)
    internal
  {
    _role.bearer[_addr] = false;
  }

  /**
   * @dev check if an address has this role
   * // reverts
   */
  function check(Role storage _role, address _addr)
    internal
    view
  {
    require(has(_role, _addr));
  }

  /**
   * @dev check if an address has this role
   * @return bool
   */
  function has(Role storage _role, address _addr)
    internal
    view
    returns (bool)
  {
    return _role.bearer[_addr];
  }
}

/**
 * @title RBAC (Role-Based Access Control)
 * @author Matt Condon (@Shrugs)
 * @dev Stores and provides setters and getters for roles and addresses.
 * Supports unlimited numbers of roles and addresses.
 * See //contracts/mocks/RBACMock.sol for an example of usage.
 * This RBAC method uses strings to key roles. It may be beneficial
 * for you to write your own implementation of this interface using Enums or similar.
 */
contract RBAC {
  using Roles for Roles.Role;

  mapping (string => Roles.Role) private roles;

  event RoleAdded(address indexed operator, string role);
  event RoleRemoved(address indexed operator, string role);

  /**
   * @dev reverts if addr does not have role
   * @param _operator address
   * @param _role the name of the role
   * // reverts
   */
  function checkRole(address _operator, string _role)
    public
    view
  {
    roles[_role].check(_operator);
  }

  /**
   * @dev determine if addr has role
   * @param _operator address
   * @param _role the name of the role
   * @return bool
   */
  function hasRole(address _operator, string _role)
    public
    view
    returns (bool)
  {
    return roles[_role].has(_operator);
  }

  /**
   * @dev add a role to an address
   * @param _operator address
   * @param _role the name of the role
   */
  function addRole(address _operator, string _role)
    internal
  {
    roles[_role].add(_operator);
    emit RoleAdded(_operator, _role);
  }

  /**
   * @dev remove a role from an address
   * @param _operator address
   * @param _role the name of the role
   */
  function removeRole(address _operator, string _role)
    internal
  {
    roles[_role].remove(_operator);
    emit RoleRemoved(_operator, _role);
  }

  /**
   * @dev modifier to scope access to a single role (uses msg.sender as addr)
   * @param _role the name of the role
   * // reverts
   */
  modifier onlyRole(string _role)
  {
    checkRole(msg.sender, _role);
    _;
  }

  /**
   * @dev modifier to scope access to a set of roles (uses msg.sender as addr)
   * @param _roles the names of the roles to scope access to
   * // reverts
   *
   * @TODO - when solidity supports dynamic arrays as arguments to modifiers, provide this
   *  see: https://github.com/ethereum/solidity/issues/2467
   */
  // modifier onlyRoles(string[] _roles) {
  //     bool hasAnyRole = false;
  //     for (uint8 i = 0; i < _roles.length; i++) {
  //         if (hasRole(msg.sender, _roles[i])) {
  //             hasAnyRole = true;
  //             break;
  //         }
  //     }

  //     require(hasAnyRole);

  //     _;
  // }
}

/**
 * @title Superuser
 * @dev The Superuser contract defines a single superuser who can transfer the ownership
 * of a contract to a new address, even if he is not the owner.
 * A superuser can transfer his role to a new address.
 */
contract Superuser is Ownable, RBAC {
  string public constant ROLE_SUPERUSER = "superuser";

  constructor () public {
    addRole(msg.sender, ROLE_SUPERUSER);
  }

  /**
   * @dev Throws if called by any account that's not a superuser.
   */
  modifier onlySuperuser() {
    checkRole(msg.sender, ROLE_SUPERUSER);
    _;
  }

  modifier onlyOwnerOrSuperuser() {
    require(msg.sender == owner || isSuperuser(msg.sender));
    _;
  }

  /**
   * @dev getter to determine if address has superuser role
   */
  function isSuperuser(address _addr)
    public
    view
    returns (bool)
  {
    return hasRole(_addr, ROLE_SUPERUSER);
  }

  /**
   * @dev Allows the current superuser to transfer his role to a newSuperuser.
   * @param _newSuperuser The address to transfer ownership to.
   */
  function transferSuperuser(address _newSuperuser) public onlySuperuser {
    require(_newSuperuser != address(0));
    removeRole(msg.sender, ROLE_SUPERUSER);
    addRole(_newSuperuser, ROLE_SUPERUSER);
  }

  /**
   * @dev Allows the current superuser or owner to transfer control of the contract to a newOwner.
   * @param _newOwner The address to transfer ownership to.
   */
  function transferOwnership(address _newOwner) public onlyOwnerOrSuperuser {
    _transferOwnership(_newOwner);
  }
}

// Smart contract for interchain linking
contract Braided is BraidedInterface, Superuser {

  // Strand identifies a specific chain + contract on which block/hashes are stored
  struct Strand {
    uint strandID;
    address strandContract; // must support BraidedInterface if present
    bytes32 genesisBlockHash;
    string description;
  }
  
  // identifies a block by number and its hash
  struct Block {
    uint blockNumber;
    bytes32 blockHash;
  }

  // error messages
  string constant INVALID_BLOCK = "invalid block";
  string constant INVALID_STRAND = "invalid strand";
  string constant NO_PERMISSION = "no permission";

  // roles
  mapping (uint => Roles.Role) private addBlockRoles;

  Strand[] public strands;
  mapping(uint => uint) internal strandIndexByStrandID;
  mapping(uint => Block[]) internal blocks;
  mapping(uint => mapping(uint => uint)) internal blockByNumber;

  event BlockAdded(uint indexed strandID, uint indexed blockNumber, bytes32 blockHash);

  constructor() public {
    // Strand 0 is reserved
    strands.push(Strand(0, 0, 0, ""));
  }

  // Add a strand
  function addStrand(uint strandID, address strandContract, bytes32 genesisBlockHash, string description) external onlyOwnerOrSuperuser() {
    // strand 0 is reserved
    require(strandID != 0, INVALID_STRAND);
    // strandID must not already be in use
    require(strandIndexByStrandID[strandID] == 0, INVALID_STRAND);
    // Add the strand
    strands.push(Strand(strandID, strandContract, genesisBlockHash, description));
    // make it possible to find the strand in the array by strandID
    strandIndexByStrandID[strandID] = strands.length - 1;
  }

  // make a method require a known strand
  modifier validStrandID(uint strandID) {
    require(strandIndexByStrandID[strandID] != 0, INVALID_STRAND);
    _;
  }

  // return total number of strands
  function getStrandCount() external view returns (uint) {
    return strands.length - 1;
  }

  // get the Braided Contract deployed on the specified strand (if any).
  // If a new instance of the Braided Contract is deployed, then that will
  // have to be a new Strand ID.
  function getStrandContract(uint strandID) external view validStrandID(strandID) returns (address) {
    return strands[strandIndexByStrandID[strandID]].strandContract;
  }

  // get the genesis block hash for the specified strand
  function getStrandGenesisBlockHash(uint strandID) external view validStrandID(strandID) returns (bytes32) {
    return strands[strandIndexByStrandID[strandID]].genesisBlockHash;
  }

  // get the description for the specified strand
  function getStrandDescription(uint strandID) external view validStrandID(strandID) returns (string) {
    return strands[strandIndexByStrandID[strandID]].description;
  }

  // grant role to specified account
  function addAgent(address agent, uint strandID) external onlyOwnerOrSuperuser() validStrandID(strandID) {
    addBlockRoles[strandID].add(agent);
  }

  // revoke role from specied account
  function removeAgent(address agent, uint strandID) external onlyOwnerOrSuperuser() validStrandID(strandID) {
    addBlockRoles[strandID].remove(agent);
  }

  // add a block to the specified strand
  function addBlock(uint strandID, uint blockNumber, bytes32 blockHash) external validStrandID(strandID) {
    // caller must have permission
    require(addBlockRoles[strandID].has(msg.sender), NO_PERMISSION);
    // the block numbers must increase
    require(blocks[strandID].length == 0 || blocks[strandID][blocks[strandID].length - 1].blockNumber < blockNumber, INVALID_BLOCK);
    // add the block
    blocks[strandID].push(Block(blockNumber, blockHash));
    // make it possible to look up the block by block number
    blockByNumber[strandID][blockNumber] = blocks[strandID].length - 1;
    // add the event for notification
    emit BlockAdded(strandID, blockNumber, blockHash);
  }

  // get the block hash for the block number on the specified strand
  function getBlockHash(uint strandID, uint blockNumber) external view validStrandID(strandID) returns (bytes32) {
    Block memory theBlock = blocks[strandID][blockByNumber[strandID][blockNumber]];
    // blockByNumber has 0 for blocks that don't exist, 
    // which could give the wrong block, so check.
    require(theBlock.blockNumber == blockNumber, INVALID_BLOCK);
    return theBlock.blockHash;
  }

  // get the highest block number recorded for the specified strand
  function getHighestBlockNumber(uint strandID) external view validStrandID(strandID) returns (uint) {
    return blocks[strandID][blocks[strandID].length - 1].blockNumber;
  }

  // get the previous block number recorded to the one supplied for the
  // specified strand (used to walk the strand backwards)
  function getPreviousBlockNumber(uint strandID, uint blockNumber) external view validStrandID(strandID) returns (uint) {
    return blocks[strandID][blockByNumber[strandID][blockNumber] - 1].blockNumber;
  }

  // get the previous block recorded to the one supplied for the specified
  // strand (used to walk the strand backwards)
  function getPreviousBlock(uint strandID, uint blockNumber) external view validStrandID(strandID)
    returns (uint prevBlockNumber, bytes32 prevBlockHash) { // solium-disable-line lbrace
    Block memory theBlock = blocks[strandID][blockByNumber[strandID][blockNumber] - 1];
    prevBlockNumber = theBlock.blockNumber;
    prevBlockHash = theBlock.blockHash;
  }
}

    Contract ABI  
[{"constant":true,"inputs":[{"name":"strandID","type":"uint256"},{"name":"blockNumber","type":"uint256"}],"name":"getPreviousBlockNumber","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_operator","type":"address"},{"name":"_role","type":"string"}],"name":"checkRole","outputs":[],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"strandID","type":"uint256"},{"name":"blockNumber","type":"uint256"}],"name":"getBlockHash","outputs":[{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_operator","type":"address"},{"name":"_role","type":"string"}],"name":"hasRole","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_newSuperuser","type":"address"}],"name":"transferSuperuser","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"agent","type":"address"},{"name":"strandID","type":"uint256"}],"name":"addAgent","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"strandID","type":"uint256"}],"name":"getStrandGenesisBlockHash","outputs":[{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"renounceOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"strandID","type":"uint256"}],"name":"getHighestBlockNumber","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getStrandCount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"strandID","type":"uint256"}],"name":"getStrandDescription","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"strandID","type":"uint256"},{"name":"blockNumber","type":"uint256"}],"name":"getPreviousBlock","outputs":[{"name":"prevBlockNumber","type":"uint256"},{"name":"prevBlockHash","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"strands","outputs":[{"name":"strandID","type":"uint256"},{"name":"strandContract","type":"address"},{"name":"genesisBlockHash","type":"bytes32"},{"name":"description","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_addr","type":"address"}],"name":"isSuperuser","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"strandID","type":"uint256"}],"name":"getStrandContract","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"strandID","type":"uint256"},{"name":"strandContract","type":"address"},{"name":"genesisBlockHash","type":"bytes32"},{"name":"description","type":"string"}],"name":"addStrand","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"strandID","type":"uint256"},{"name":"blockNumber","type":"uint256"},{"name":"blockHash","type":"bytes32"}],"name":"addBlock","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"ROLE_SUPERUSER","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"agent","type":"address"},{"name":"strandID","type":"uint256"}],"name":"removeAgent","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"strandID","type":"uint256"},{"indexed":true,"name":"blockNumber","type":"uint256"},{"indexed":false,"name":"blockHash","type":"bytes32"}],"name":"BlockAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"operator","type":"address"},{"indexed":false,"name":"role","type":"string"}],"name":"RoleAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"operator","type":"address"},{"indexed":false,"name":"role","type":"string"}],"name":"RoleRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"}],"name":"OwnershipRenounced","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"}]

  Contract Creation Code Switch To Opcodes View
60806040523480156200001157600080fd5b5060008054600160a060020a0319163390811790915560408051808201909152600981527f7375706572757365720000000000000000000000000000000000000000000000602082015262000070919064010000000062000187810204565b604080516080810182526000808252602080830182815283850183815285518084019096528386526060850195865260038054600181018083559190955285517fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b600490960295860190815592517fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85c86018054600160a060020a031916600160a060020a0390921691909117905590517fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85d8501559451805191936200017d937fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85e90910192910190620002d2565b5050505062000377565b62000203826001836040518082805190602001908083835b60208310620001c05780518252601f1990920191602091820191016200019f565b51815160209384036101000a6000190180199092169116179052920194855250604051938490030190922092915050640100000000620002ad8102620018871704565b81600160a060020a03167fbfec83d64eaa953f2708271a023ab9ee82057f8f3578d548c1a4ba0b5b700489826040518080602001828103825283818151815260200191508051906020019080838360005b838110156200026e57818101518382015260200162000254565b50505050905090810190601f1680156200029c5780820380516001836020036101000a031916815260200191505b509250505060405180910390a25050565b600160a060020a0316600090815260209190915260409020805460ff19166001179055565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200031557805160ff191683800117855562000345565b8280016001018555821562000345579182015b828111156200034557825182559160200191906001019062000328565b506200035392915062000357565b5090565b6200037491905b808211156200035357600081556001016200035e565b90565b611a6680620003876000396000f30060806040526004361061011c5763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166305c270e281146101215780630988ca8c1461014e5780630d7bf53c146101b7578063217fe6c6146101d257806357c393fa1461024d578063596939f51461026e5780635c0f9a3e14610292578063715018a6146102aa5780637eb82601146102bf57806381263fed146102d757806383eb72ac146102ec5780638da5cb5b1461037957806391a01414146103aa578063951611b6146103de578063bceee05e1461049d578063c3283d83146104be578063c8b2ccba146104d6578063e9c6c1761461050b578063ebb4f48414610529578063f2fde38b1461053e578063f7eaec4f1461055f575b600080fd5b34801561012d57600080fd5b5061013c600435602435610583565b60408051918252519081900360200190f35b34801561015a57600080fd5b5060408051602060046024803582810135601f81018590048502860185019096528585526101b5958335600160a060020a03169536956044949193909101919081908401838280828437509497506106959650505050505050565b005b3480156101c357600080fd5b5061013c600435602435610703565b3480156101de57600080fd5b5060408051602060046024803582810135601f8101859004850286018501909652858552610239958335600160a060020a03169536956044949193909101919081908401838280828437509497506108849650505050505050565b604080519115158252519081900360200190f35b34801561025957600080fd5b506101b5600160a060020a03600435166108f7565b34801561027a57600080fd5b506101b5600160a060020a0360043516602435610996565b34801561029e57600080fd5b5061013c600435610a6b565b3480156102b657600080fd5b506101b5610b2b565b3480156102cb57600080fd5b5061013c600435610b97565b3480156102e357600080fd5b5061013c610c57565b3480156102f857600080fd5b50610304600435610c62565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561033e578181015183820152602001610326565b50505050905090810190601f16801561036b5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561038557600080fd5b5061038e610daf565b60408051600160a060020a039092168252519081900360200190f35b3480156103b657600080fd5b506103c5600435602435610dbe565b6040805192835260208301919091528051918290030190f35b3480156103ea57600080fd5b506103f6600435610ec0565b6040518085815260200184600160a060020a0316600160a060020a03168152602001836000191660001916815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561045f578181015183820152602001610447565b50505050905090810190601f16801561048c5780820380516001836020036101000a031916815260200191505b509550505050505060405180910390f35b3480156104a957600080fd5b50610239600160a060020a0360043516610f8f565b3480156104ca57600080fd5b5061038e600435610fc4565b3480156104e257600080fd5b506101b5600480359060248035600160a060020a0316916044359160643590810191013561108e565b34801561051757600080fd5b506101b56004356024356044356112af565b34801561053557600080fd5b5061030461154a565b34801561054a57600080fd5b506101b5600160a060020a036004351661156f565b34801561056b57600080fd5b506101b5600160a060020a03600435166024356115a0565b6000828152600460209081526040808320548151808301909252600e8252600080516020611a1b83398151915292820192909252849115156106465760405160e560020a62461bcd0281526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561060b5781810151838201526020016105f3565b50505050905090810190601f1680156106385780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008481526005602090815260408083206006835281842087855290925290912054815460001990910190811061067a57fe5b90600052602060002090600202016000015491505092915050565b6106ff826001836040518082805190602001908083835b602083106106cb5780518252601f1990920191602091820191016106ac565b51815160209384036101000a6000190180199092169116179052920194855250604051938490030190922092915050611670565b5050565b600061070d61194b565b600084815260046020908152604091829020548251808401909352600e8352600080516020611a1b8339815191529183019190915285919015156107965760405160e560020a62461bcd0281526004018080602001828103825283818151815260200191508051906020019080838360008381101561060b5781810151838201526020016105f3565b5060008581526005602090815260408083206006835281842088855290925290912054815481106107c357fe5b600091825260209182902060408051808201825260029093029091018054808452600190910154838501528151808301909252600d82527f696e76616c696420626c6f636b00000000000000000000000000000000000000938201939093529093509085146108775760405160e560020a62461bcd0281526004018080602001828103825283818151815260200191508051906020019080838360008381101561060b5781810151838201526020016105f3565b5050602001519392505050565b60006108f0836001846040518082805190602001908083835b602083106108bc5780518252601f19909201916020918201910161089d565b51815160209384036101000a6000190180199092169116179052920194855250604051938490030190922092915050611685565b9392505050565b610924336040805190810160405280600981526020016000805160206119fb833981519152815250610695565b600160a060020a038116151561093957600080fd5b610966336040805190810160405280600981526020016000805160206119fb8339815191528152506116a4565b610993816040805190810160405280600981526020016000805160206119fb8339815191528152506117b5565b50565b600054600160a060020a03163314806109b357506109b333610f8f565b15156109be57600080fd5b600081815260046020908152604091829020548251808401909352600e8352600080516020611a1b833981519152918301919091528291901515610a475760405160e560020a62461bcd0281526004018080602001828103825283818151815260200191508051906020019080838360008381101561060b5781810151838201526020016105f3565b506000828152600260205260409020610a66908463ffffffff61188716565b505050565b6000818152600460209081526040808320548151808301909252600e8252600080516020611a1b8339815191529282019290925283911515610af25760405160e560020a62461bcd0281526004018080602001828103825283818151815260200191508051906020019080838360008381101561060b5781810151838201526020016105f3565b50600083815260046020526040902054600380549091908110610b1157fe5b906000526020600020906004020160020154915050919050565b600054600160a060020a03163314610b4257600080fd5b60008054604051600160a060020a03909116917ff8df31144d9c2f0f6b59d69b8b98abd5459d07f2742c4df920b25aae33c6482091a26000805473ffffffffffffffffffffffffffffffffffffffff19169055565b6000818152600460209081526040808320548151808301909252600e8252600080516020611a1b8339815191529282019290925283911515610c1e5760405160e560020a62461bcd0281526004018080602001828103825283818151815260200191508051906020019080838360008381101561060b5781810151838201526020016105f3565b50600083815260056020526040902080546000198101908110610c3d57fe5b906000526020600020906002020160000154915050919050565b600354600019015b90565b600081815260046020908152604091829020548251808401909352600e8352600080516020611a1b8339815191529183019190915260609183911515610ced5760405160e560020a62461bcd0281526004018080602001828103825283818151815260200191508051906020019080838360008381101561060b5781810151838201526020016105f3565b50600083815260046020526040902054600380549091908110610d0c57fe5b6000918252602091829020600360049092020101805460408051601f6002600019610100600187161502019094169390930492830185900485028101850190915281815292830182828015610da25780601f10610d7757610100808354040283529160200191610da2565b820191906000526020600020905b815481529060010190602001808311610d8557829003601f168201915b5050505050915050919050565b600054600160a060020a031681565b600080610dc961194b565b600085815260046020908152604091829020548251808401909352600e8352600080516020611a1b833981519152918301919091528691901515610e525760405160e560020a62461bcd0281526004018080602001828103825283818151815260200191508051906020019080838360008381101561060b5781810151838201526020016105f3565b50600086815260056020908152604080832060068352818420898552909252909120548154600019909101908110610e8657fe5b6000918252602091829020604080518082019091526002909202018054808352600190910154919092018190529097909650945050505050565b6003805482908110610ece57fe5b60009182526020918290206004919091020180546001808301546002808501546003860180546040805161010097831615979097026000190190911693909304601f8101899004890286018901909352828552949750600160a060020a039092169591949391830182828015610f855780601f10610f5a57610100808354040283529160200191610f85565b820191906000526020600020905b815481529060010190602001808311610f6857829003601f168201915b5050505050905084565b6000610fbe826040805190810160405280600981526020016000805160206119fb833981519152815250610884565b92915050565b6000818152600460209081526040808320548151808301909252600e8252600080516020611a1b833981519152928201929092528391151561104b5760405160e560020a62461bcd0281526004018080602001828103825283818151815260200191508051906020019080838360008381101561060b5781810151838201526020016105f3565b5060008381526004602052604090205460038054909190811061106a57fe5b6000918252602090912060049091020160010154600160a060020a03169392505050565b600054600160a060020a03163314806110ab57506110ab33610f8f565b15156110b657600080fd5b60408051808201909152600e8152600080516020611a1b833981519152602082015285151561112a5760405160e560020a62461bcd0281526004018080602001828103825283818151815260200191508051906020019080838360008381101561060b5781810151838201526020016105f3565b50600085815260046020908152604091829020548251808401909352600e8352600080516020611a1b83398151915291830191909152156111b05760405160e560020a62461bcd0281526004018080602001828103825283818151815260200191508051906020019080838360008381101561060b5781810151838201526020016105f3565b50600360806040519081016040528087815260200186600160a060020a031681526020018560001916815260200184848080601f016020809104026020016040519081016040528093929190818152602001838380828437505050929093525050825460018082018086556000958652602095869020855160049094020192835584860151918301805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a03909316929092179091556040840151600283015560608401518051919592935061128a926003850192910190611962565b5050600354600097885260046020526040909720600019909701909655505050505050565b600083815260046020908152604091829020548251808401909352600e8352600080516020611a1b8339815191529183019190915284919015156113385760405160e560020a62461bcd0281526004018080602001828103825283818151815260200191508051906020019080838360008381101561060b5781810151838201526020016105f3565b506000848152600260205260409020611357903363ffffffff61168516565b60408051808201909152600d81527f6e6f207065726d697373696f6e0000000000000000000000000000000000000060208201529015156113dd5760405160e560020a62461bcd0281526004018080602001828103825283818151815260200191508051906020019080838360008381101561060b5781810151838201526020016105f3565b506000848152600560205260409020541580611429575060008481526005602052604090208054849190600019810190811061141557fe5b906000526020600020906002020160000154105b60408051808201909152600d81527f696e76616c696420626c6f636b0000000000000000000000000000000000000060208201529015156114af5760405160e560020a62461bcd0281526004018080602001828103825283818151815260200191508051906020019080838360008381101561060b5781810151838201526020016105f3565b5060008481526005602090815260408083208151808301835287815280840187815282546001818101855584885286882093516002909202909301908155905191015587845254600683528184208785528352928190206000199390930190925581518481529151859287927f8a22ee899102a366ac8ad0495127319cb1ff2403cfae855f83a89cda1266674d92918290030190a350505050565b60408051808201909152600981526000805160206119fb833981519152602082015281565b600054600160a060020a031633148061158c575061158c33610f8f565b151561159757600080fd5b610993816118ac565b600054600160a060020a03163314806115bd57506115bd33610f8f565b15156115c857600080fd5b600081815260046020908152604091829020548251808401909352600e8352600080516020611a1b8339815191529183019190915282919015156116515760405160e560020a62461bcd0281526004018080602001828103825283818151815260200191508051906020019080838360008381101561060b5781810151838201526020016105f3565b506000828152600260205260409020610a66908463ffffffff61192916565b61167a8282611685565b15156106ff57600080fd5b600160a060020a03166000908152602091909152604090205460ff1690565b61170e826001836040518082805190602001908083835b602083106116da5780518252601f1990920191602091820191016116bb565b51815160209384036101000a6000190180199092169116179052920194855250604051938490030190922092915050611929565b81600160a060020a03167fd211483f91fc6eff862467f8de606587a30c8fc9981056f051b897a418df803a826040518080602001828103825283818151815260200191508051906020019080838360005b8381101561177757818101518382015260200161175f565b50505050905090810190601f1680156117a45780820380516001836020036101000a031916815260200191505b509250505060405180910390a25050565b61181f826001836040518082805190602001908083835b602083106117eb5780518252601f1990920191602091820191016117cc565b51815160209384036101000a6000190180199092169116179052920194855250604051938490030190922092915050611887565b81600160a060020a03167fbfec83d64eaa953f2708271a023ab9ee82057f8f3578d548c1a4ba0b5b700489826040518080602001828103825283818151815260200191508051906020019080838360008381101561177757818101518382015260200161175f565b600160a060020a0316600090815260209190915260409020805460ff19166001179055565b600160a060020a03811615156118c157600080fd5b60008054604051600160a060020a03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a36000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600160a060020a0316600090815260209190915260409020805460ff19169055565b604080518082019091526000808252602082015290565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106119a357805160ff19168380011785556119d0565b828001600101855582156119d0579182015b828111156119d05782518255916020019190600101906119b5565b506119dc9291506119e0565b5090565b610c5f91905b808211156119dc57600081556001016119e656007375706572757365720000000000000000000000000000000000000000000000696e76616c696420737472616e64000000000000000000000000000000000000a165627a7a72305820b2364bfe23b8953300717d484aefd33490415e5d25d03322a1013a1bc71f9a250029

   Swarm Source:
bzzr://b2364bfe23b8953300717d484aefd33490415e5d25d03322a1013a1bc71f9a25

 

View All
Block Age transaction Difficulty GasUsed Reward
View All
Block Age UncleNumber Difficulty GasUsed Reward