Contract Overview
Balance: 0 Ether
Ether Value: $0
Transactions: 12 txns
Token Tracker: BitPaintings (BP)
Misc:
Address Watch: Add To Watch List
Contract Creator: 0x184d7e44440963d7e8ca8c04f0c6234ffb98db40at txn 0x296d92134d4a558eb36fd18e995e3991a3d6f0b0d34cef0f58822b860d5b2b85
 Latest 12 txns

TxHash Age From To Value [TxFee]
0x6535931e666e6b6a1c6492fcf61094f62a3074f55760726232104caefd38a3a0165 days 1 hr ago0x959ea444e0fabb1eea4de9944ff8754f16aac731  IN   0x615e3583390a6c118887494e0ea7ce3a24f8cecc0 Ether0.046944098
0x5eb8f85592dbe4bbfd3d66a543fd6883eb7d63bf02366a1c6d04047e03a46a21165 days 20 hrs ago0x959ea444e0fabb1eea4de9944ff8754f16aac731  IN   0x615e3583390a6c118887494e0ea7ce3a24f8cecc0 Ether0.02861805
0xdf91aa02e15f82d8b32c6ce75664bbf7f8748e6472371688cc844d892e07e1a9167 days 23 hrs ago0x959ea444e0fabb1eea4de9944ff8754f16aac731  IN   0x615e3583390a6c118887494e0ea7ce3a24f8cecc0 Ether0.02288164
0x0414ef3cfadec79e30e827d6797455f73a083f503b8f46e9896b68f02c0615e8168 days 22 hrs ago0x959ea444e0fabb1eea4de9944ff8754f16aac731  IN   0x615e3583390a6c118887494e0ea7ce3a24f8cecc0 Ether0.031483375
0x4988fb8d44d4f3a711b49b0d82a00b039962c71df0a2ba9f22b0a572d681b542172 days 2 hrs ago0x959ea444e0fabb1eea4de9944ff8754f16aac731  IN   0x615e3583390a6c118887494e0ea7ce3a24f8cecc0.001 Ether0.00053928
0x3a919a1d05acdedda25177d5f4de3d10108443de9e6c91943d222c9d422d1178172 days 2 hrs ago0x959ea444e0fabb1eea4de9944ff8754f16aac731  IN   0x615e3583390a6c118887494e0ea7ce3a24f8cecc0 Ether0.001718043
0x296e09babc537ed9e68d236d606d4610bd62c76ca167024b0b315b9f44d9ffb3172 days 2 hrs ago0x959ea444e0fabb1eea4de9944ff8754f16aac731  IN   0x615e3583390a6c118887494e0ea7ce3a24f8cecc0 Ether0.001909575
0xc1b8604e4d3a63386f1e96f13e10319087aa22045e2f973554683853d3cf1997172 days 2 hrs ago0x959ea444e0fabb1eea4de9944ff8754f16aac731  IN   0x615e3583390a6c118887494e0ea7ce3a24f8cecc0 Ether0.00184185
0xf8dee596b82b3b190151149247ba90ed058beaf01db782947a4b8367e84d3738173 days 2 hrs ago0x959ea444e0fabb1eea4de9944ff8754f16aac731  IN   0x615e3583390a6c118887494e0ea7ce3a24f8cecc0 Ether0.001715163
0x399ccaebc827f1e4ef20e1a80acf1fe965eb9efd53ad0ced02b84f1c20bfdc1c173 days 4 hrs ago0x184d7e44440963d7e8ca8c04f0c6234ffb98db40  IN   0x615e3583390a6c118887494e0ea7ce3a24f8cecc0 Ether0.0005872
0x9a564f218fd1bf897fc80102fab8fe6ce7744c3f95b4566a226ee24c7ed2bcc4173 days 7 hrs ago0x184d7e44440963d7e8ca8c04f0c6234ffb98db40  IN   0x615e3583390a6c118887494e0ea7ce3a24f8cecc0 Ether0.000087752
0x296d92134d4a558eb36fd18e995e3991a3d6f0b0d34cef0f58822b860d5b2b85173 days 7 hrs ago0x184d7e44440963d7e8ca8c04f0c6234ffb98db40  IN    Contract Creation0 Ether0.03849413
[ Download CSV Export  ] 
 Internal Transactions as a result of Contract Execution
 Latest 1 Internal Transaction

ParentTxHash Block Age From To Value
0x4988fb8d44d4f3a711b49b0d82a00b039962c71df0a2ba9f22b0a572d681b5425875379172 days 2 hrs ago0x615e3583390a6c118887494e0ea7ce3a24f8cecc0xcdb100434095e0ec0cbbd8d0d77f114b8eece5410.001 Ether
[ Download CSV Export  ] 
Warning: The Compiled Contract might be susceptible to ExpExponentCleanup (medium/high-severity), NestedArrayFunctionCallDecoder (medium-severity), ZeroFunctionSelector (very low-severity) SolidityCompiler Bugs.

Contract Source Code Verified (Exact Match)
Contract Name: BitpaintingPaintings
Compiler Text: v0.4.15+commit.bbb8e64f
Optimization Enabled: Yes
Runs (Optimiser):  200



  Contract Source Code   Find Similiar Contracts

pragma solidity ^0.4.15;

// File: contracts/interfaces/IAuctions.sol

contract IAuctions {

    function currentPrice(uint _tokenId) public constant returns (uint256);
    function createAuction(
        uint256 _tokenId,
        uint256 _startingPrice,
        uint256 _endingPrice,
        uint256 _duration) public;
    function createReleaseAuction(
        uint _tokenId,
        uint _startingPrice,
        uint _endingPrice,
        uint _startedAt,
        uint _duration) public;
    function cancelAuction(uint256 _tokenId) external;
    function cancelAuctionWhenPaused(uint256 _tokenId) external;
    function bid(uint256 _tokenId, address _owner) external payable;
    function market() public constant returns (
        uint[] tokens,
        address[] sellers,
        uint8[] generations,
        uint8[] speeds,
        uint[] prices
    );
    function auctionsOf(address _of) public constant returns (
        uint[] tokens,
        uint[] prices
    );
    function signature() external constant returns (uint _signature);
}

// File: contracts/interfaces/IPaintings.sol

contract IPaintings {
    function createPainting(uint _tokenId) external;
    function sendAsGift(address _to, uint _tokenId) external;
    function collectionOf(address _of) public constant returns (
        uint[] tokens,
        bool[] pending,
        bool[] forSale,
        bool[] locked,
        uint8[] generations,
        uint8[] speeds
    );
    function collectionCountsOf(address _of)
        public constant returns (uint total, uint pending, uint forSale);
    function signature() external constant returns (uint _signature);
}

// File: contracts/interfaces/IStorage.sol

contract IStorage {
    function isOwner(address _address) public constant returns (bool);

    function isAllowed(address _address) external constant returns (bool);
    function developer() public constant returns (address);
    function setDeveloper(address _address) public;
    function addAdmin(address _address) public;
    function isAdmin(address _address) public constant returns (bool);
    function removeAdmin(address _address) public;
    function contracts(uint _signature) public returns (address _address);

    function exists(uint _tokenId) external constant returns (bool);
    function paintingsCount() public constant returns (uint);
    function increaseOwnershipTokenCount(address _address) public;
    function decreaseOwnershipTokenCount(address _address) public;
    function setOwnership(uint _tokenId, address _address) public;
    function getPainting(uint _tokenId)
        external constant returns (address, uint, uint, uint, uint8, uint8);
    function createPainting(
        address _owner,
        uint _tokenId,
        uint _parentId,
        uint8 _generation,
        uint8 _speed,
        uint _artistId,
        uint _releasedAt) public;
    function approve(uint _tokenId, address _claimant) external;
    function isApprovedFor(uint _tokenId, address _claimant)
        external constant returns (bool);
    function createEditionMeta(uint _tokenId) public;
    function getPaintingOwner(uint _tokenId)
        external constant returns (address);
    function getPaintingGeneration(uint _tokenId)
        public constant returns (uint8);
    function getPaintingSpeed(uint _tokenId)
        external constant returns (uint8);
    function getPaintingArtistId(uint _tokenId)
        public constant returns (uint artistId);
    function getOwnershipTokenCount(address _address)
        external constant returns (uint);
    function isReady(uint _tokenId) public constant returns (bool);
    function getPaintingIdAtIndex(uint _index) public constant returns (uint);
    function lastEditionOf(uint _index) public constant returns (uint);
    function getPaintingOriginal(uint _tokenId)
        external constant returns (uint);
    function canBeBidden(uint _tokenId) public constant returns (bool _can);

    function addAuction(
        uint _tokenId,
        uint _startingPrice,
        uint _endingPrice,
        uint _duration,
        address _seller) public;
    function addReleaseAuction(
        uint _tokenId,
        uint _startingPrice,
        uint _endingPrice,
        uint _startedAt,
        uint _duration) public;
    function initAuction(
        uint _tokenId,
        uint _startingPrice,
        uint _endingPrice,
        uint _startedAt,
        uint _duration,
        address _seller,
        bool _byTeam) public;
    function _isOnAuction(uint _tokenId) internal constant returns (bool);
    function isOnAuction(uint _tokenId) external constant returns (bool);
    function removeAuction(uint _tokenId) public;
    function getAuction(uint256 _tokenId)
        external constant returns (
        address seller,
        uint256 startingPrice,
        uint256 endingPrice,
        uint256 duration,
        uint256 startedAt);
    function getAuctionSeller(uint256 _tokenId)
        public constant returns (address);
    function getAuctionEnd(uint _tokenId)
        public constant returns (uint);
    function canBeCanceled(uint _tokenId) external constant returns (bool);
    function getAuctionsCount() public constant returns (uint);
    function getTokensOnAuction() public constant returns (uint[]);
    function getTokenIdAtIndex(uint _index) public constant returns (uint);
    function getAuctionStartedAt(uint256 _tokenId) public constant returns (uint);

    function getOffsetIndex() public constant returns (uint);
    function nextOffsetIndex() public returns (uint);
    function canCreateEdition(uint _tokenId, uint8 _generation)
        public constant returns (bool);
    function isValidGeneration(uint8 _generation)
        public constant returns (bool);
    function increaseGenerationCount(uint _tokenId, uint8 _generation) public;
    function getEditionsCount(uint _tokenId) external constant returns (uint8[3]);
    function setLastEditionOf(uint _tokenId, uint _editionId) public;
    function setEditionLimits(uint _tokenId, uint8 _gen1, uint8 _gen2, uint8 _gen3) public;
    function getEditionLimits(uint _tokenId) external constant returns (uint8[3]);

    function hasEditionInProgress(uint _tokenId) external constant returns (bool);
    function hasEmptyEditionSlots(uint _tokenId) external constant returns (bool);

    function setPaintingName(uint _tokenId, string _name) public;
    function setPaintingArtist(uint _tokenId, string _name) public;
    function purgeInformation(uint _tokenId) public;
    function resetEditionLimits(uint _tokenId) public;
    function resetPainting(uint _tokenId) public;
    function decreaseSpeed(uint _tokenId) public;
    function isCanceled(uint _tokenId) public constant returns (bool _is);
    function totalPaintingsCount() public constant returns (uint _total);
    function isSecondary(uint _tokenId) public constant returns (bool _is);
    function secondarySaleCut() public constant returns (uint8 _cut);
    function sealForChanges(uint _tokenId) public;
    function canBeChanged(uint _tokenId) public constant returns (bool _can);

    function getPaintingName(uint _tokenId) public constant returns (string);
    function getPaintingArtist(uint _tokenId) public constant returns (string);

    function signature() external constant returns (bytes4);
}

// File: contracts/libs/Ownable.sol

/**
* @title Ownable
* @dev Manages ownership of the contracts
*/
contract Ownable {

    address public owner;

    function Ownable() public {
        owner = msg.sender;
    }

    modifier onlyOwner() {
        require(msg.sender == owner);
        _;
    }

    function isOwner(address _address) public constant returns (bool) {
        return _address == owner;
    }

    function transferOwnership(address newOwner) external onlyOwner {
        require(newOwner != address(0));
        owner = newOwner;
    }

}

// File: contracts/libs/Pausable.sol

/**
 * @title Pausable
 * @dev Base contract which allows children to implement an emergency stop mechanism.
 */
contract Pausable is Ownable {
    event Pause();
    event Unpause();

    bool public paused = false;

    /**
    * @dev modifier to allow actions only when the contract IS paused
    */
    modifier whenNotPaused() {
        require(!paused);
        _;
    }

    /**
    * @dev modifier to allow actions only when the contract IS NOT paused
    */
    modifier whenPaused {
        require(paused);
        _;
    }

    /**
    * @dev called by the owner to pause, triggers stopped state
    */
    function _pause() internal whenNotPaused {
        paused = true;
        Pause();
    }

    /**
     * @dev called by the owner to unpause, returns to normal state
     */
    function _unpause() internal whenPaused {
        paused = false;
        Unpause();
    }
}

// File: contracts/libs/BitpaintingBase.sol

contract BitpaintingBase is Pausable {
    /*** EVENTS ***/
    event Create(uint _tokenId,
        address _owner,
        uint _parentId,
        uint8 _generation,
        uint _createdAt,
        uint _completedAt);

    event Transfer(address from, address to, uint256 tokenId);

    IStorage public bitpaintingStorage;

    modifier canPauseUnpause() {
        require(msg.sender == owner || msg.sender == bitpaintingStorage.developer());
        _;
    }

    function setBitpaintingStorage(address _address) public onlyOwner {
        require(_address != address(0));
        bitpaintingStorage = IStorage(_address);
    }

    /**
    * @dev called by the owner to pause, triggers stopped state
    */
    function pause() public canPauseUnpause whenNotPaused {
        super._pause();
    }

    /**
     * @dev called by the owner to unpause, returns to normal state
     */
    function unpause() external canPauseUnpause whenPaused {
        super._unpause();
    }

    function canUserReleaseArtwork(address _address)
        public constant returns (bool _can) {
        return (bitpaintingStorage.isOwner(_address)
            || bitpaintingStorage.isAdmin(_address)
            || bitpaintingStorage.isAllowed(_address));
    }

    function canUserCancelArtwork(address _address)
        public constant returns (bool _can) {
        return (bitpaintingStorage.isOwner(_address)
            || bitpaintingStorage.isAdmin(_address));
    }

    modifier canReleaseArtwork() {
        require(canUserReleaseArtwork(msg.sender));
        _;
    }

    modifier canCancelArtwork() {
        require(canUserCancelArtwork(msg.sender));
        _;
    }

    /// @dev Assigns ownership of a specific Painting to an address.
    function _transfer(address _from, address _to, uint256 _tokenId)
        internal {
        bitpaintingStorage.setOwnership(_tokenId, _to);
        Transfer(_from, _to, _tokenId);
    }

    function _createOriginalPainting(uint _tokenId, uint _artistId, uint _releasedAt) internal {
        address _owner = owner;
        uint _parentId = 0;
        uint8 _generation = 0;
        uint8 _speed = 10;
        _createPainting(_owner, _tokenId, _parentId, _generation, _speed, _artistId, _releasedAt);
    }

    function _createPainting(
        address _owner,
        uint _tokenId,
        uint _parentId,
        uint8 _generation,
        uint8 _speed,
        uint _artistId,
        uint _releasedAt
    )
        internal
    {
        require(_tokenId == uint256(uint32(_tokenId)));
        require(_parentId == uint256(uint32(_parentId)));
        require(_generation == uint256(uint8(_generation)));

        bitpaintingStorage.createPainting(
            _owner, _tokenId, _parentId, _generation, _speed, _artistId, _releasedAt);

        uint _createdAt;
        uint _completedAt;
        (,,_createdAt, _completedAt,,) = bitpaintingStorage.getPainting(_tokenId);

        // emit the create event
        Create(
            _tokenId,
            _owner,
            _parentId,
            _generation,
            _createdAt,
            _completedAt
        );

        // This will assign ownership, and also emit the Transfer event as
        // per ERC721 draft
        _transfer(0, _owner, _tokenId);
    }

}

// File: contracts/libs/ERC721.sol

/// @title Interface for contracts conforming to ERC-721: Non-Fungible Tokens
/// @author Dieter Shirley <[email protected]> (https://github.com/dete)
contract ERC721 {
    // Required methods
    function totalSupply() public constant returns (uint256 total);
    function balanceOf(address _owner) public constant returns (uint256 balance);
    function ownerOf(uint256 _tokenId) external constant returns (address owner);
    function approve(address _to, uint256 _tokenId) external;
    function transfer(address _to, uint256 _tokenId) external;
    function transferFrom(address _from, address _to, uint256 _tokenId) external;

    // Events
    event Transfer(address from, address to, uint256 tokenId);
    event Approval(address owner, address approved, uint256 tokenId);

    // Optional
    // function name() public view returns (string name);
    // function symbol() public view returns (string symbol);
    // function tokensOfOwner(address _owner) external view returns (uint256[] tokenIds);
    // function tokenMetadata(uint256 _tokenId, string _preferredTransport) public view returns (string infoUrl);

    // ERC-165 Compatibility (https://github.com/ethereum/EIPs/issues/165)
    function supportsInterface(bytes4 _interfaceID) external constant returns (bool);
}

// File: contracts/libs/ERC721Metadata.sol

/// @title The external contract that is responsible for generating metadata for the kitties,
///  it has one function that will return the data as bytes.
contract ERC721Metadata {
    /// @dev Given a token Id, returns a byte array that is supposed to be converted into string.
    function getMetadata(uint256 _tokenId, string) public constant returns (bytes32[4] buffer, uint256 count) {
        if (_tokenId == 1) {
            buffer[0] = "Hello World! :D";
            count = 15;
        } else if (_tokenId == 2) {
            buffer[0] = "I would definitely choose a medi";
            buffer[1] = "um length string.";
            count = 49;
        } else if (_tokenId == 3) {
            buffer[0] = "Lorem ipsum dolor sit amet, mi e";
            buffer[1] = "st accumsan dapibus augue lorem,";
            buffer[2] = " tristique vestibulum id, libero";
            buffer[3] = " suscipit varius sapien aliquam.";
            count = 128;
        }
    }
}

// File: contracts/libs/PaintingOwnership.sol

contract PaintingOwnership is BitpaintingBase, ERC721 {

    /// @notice Name and symbol of the non fungible token, as defined in ERC721.
    string public constant name = "BitPaintings";
    string public constant symbol = "BP";

    ERC721Metadata public erc721Metadata;

    bytes4 constant InterfaceSignature_ERC165 =
        bytes4(keccak256('supportsInterface(bytes4)'));

    bytes4 constant InterfaceSignature_ERC721 =
        bytes4(keccak256('name()')) ^
        bytes4(keccak256('symbol()')) ^
        bytes4(keccak256('totalSupply()')) ^
        bytes4(keccak256('balanceOf(address)')) ^
        bytes4(keccak256('ownerOf(uint256)')) ^
        bytes4(keccak256('approve(address,uint256)')) ^
        bytes4(keccak256('transfer(address,uint256)')) ^
        bytes4(keccak256('transferFrom(address,address,uint256)')) ^
        bytes4(keccak256('tokensOfOwner(address)')) ^
        bytes4(keccak256('tokenMetadata(uint256,string)'));

    /// @notice Introspection interface as per ERC-165 (https://github.com/ethereum/EIPs/issues/165).
    ///  Returns true for any standardized interfaces implemented by this contract. We implement
    ///  ERC-165 (obviously!) and ERC-721.
    function supportsInterface(bytes4 _interfaceID) external constant returns (bool)
    {
        // DEBUG ONLY
        //require((InterfaceSignature_ERC165 == 0x01ffc9a7) && (InterfaceSignature_ERC721 == 0x9a20483d));

        return ((_interfaceID == InterfaceSignature_ERC165) || (_interfaceID == InterfaceSignature_ERC721));
    }

    /// @dev Set the address of the sibling contract that tracks metadata.
    ///  CEO only.
    function setMetadataAddress(address _contractAddress) public onlyOwner {
        erc721Metadata = ERC721Metadata(_contractAddress);
    }

    function _owns(address _claimant, uint256 _tokenId) internal constant returns (bool) {
        return bitpaintingStorage.getPaintingOwner(_tokenId) == _claimant;
    }

    function balanceOf(address _owner) public constant returns (uint256 count) {
        return bitpaintingStorage.getOwnershipTokenCount(_owner);
    }

    function _approve(uint256 _tokenId, address _approved) internal {
        bitpaintingStorage.approve(_tokenId, _approved);
    }

    function _approvedFor(address _claimant, uint256 _tokenId)
        internal constant returns (bool) {
        return bitpaintingStorage.isApprovedFor(_tokenId, _claimant);
    }

    function transfer(
        address _to,
        uint256 _tokenId
    )
        external
        whenNotPaused
    {
        require(_to != address(0));
        require(_to != address(this));
        require(_owns(msg.sender, _tokenId));

        _transfer(msg.sender, _to, _tokenId);
    }

    function approve(
      address _to,
      uint256 _tokenId
    )
      external
      whenNotPaused
    {
      require(_owns(msg.sender, _tokenId));
      _approve(_tokenId, _to);

      Approval(msg.sender, _to, _tokenId);
    }

    function transferFrom(
      address _from,
      address _to,
      uint256 _tokenId
    )
        external whenNotPaused {
        _transferFrom(_from, _to, _tokenId);
    }

    function _transferFrom(
      address _from,
      address _to,
      uint256 _tokenId
    )
        internal
        whenNotPaused
    {
        require(_to != address(0));
        require(_to != address(this));
        require(_approvedFor(msg.sender, _tokenId));
        require(_owns(_from, _tokenId));

        _transfer(_from, _to, _tokenId);
    }

    function totalSupply() public constant returns (uint) {
      return bitpaintingStorage.paintingsCount();
    }

    function ownerOf(uint256 _tokenId)
        external constant returns (address) {
        return _ownerOf(_tokenId);
    }

    function _ownerOf(uint256 _tokenId)
        internal constant returns (address) {
        return bitpaintingStorage.getPaintingOwner(_tokenId);
    }

    function tokensOfOwner(address _owner)
        external constant returns(uint256[]) {
        uint256 tokenCount = balanceOf(_owner);

        if (tokenCount == 0) {
          return new uint256[](0);
        }

        uint256[] memory result = new uint256[](tokenCount);
        uint256 totalCats = totalSupply();
        uint256 resultIndex = 0;

        uint256 paintingId;

        for (paintingId = 1; paintingId <= totalCats; paintingId++) {
            if (bitpaintingStorage.getPaintingOwner(paintingId) == _owner) {
                result[resultIndex] = paintingId;
                resultIndex++;
            }
        }

        return result;
    }

    /// @dev Adapted from memcpy() by @arachnid (Nick Johnson <[email protected]>)
    ///  This method is licenced under the Apache License.
    ///  Ref: https://github.com/Arachnid/solidity-stringutils/blob/2f6ca9accb48ae14c66f1437ec50ed19a0616f78/strings.sol
    function _memcpy(uint _dest, uint _src, uint _len) private constant {
      // Copy word-length chunks while possible
      for(; _len >= 32; _len -= 32) {
          assembly {
              mstore(_dest, mload(_src))
          }
          _dest += 32;
          _src += 32;
      }

      // Copy remaining bytes
      uint256 mask = 256 ** (32 - _len) - 1;
      assembly {
          let srcpart := and(mload(_src), not(mask))
          let destpart := and(mload(_dest), mask)
          mstore(_dest, or(destpart, srcpart))
      }
    }

    /// @dev Adapted from toString(slice) by @arachnid (Nick Johnson <[email protected]>)
    ///  This method is licenced under the Apache License.
    ///  Ref: https://github.com/Arachnid/solidity-stringutils/blob/2f6ca9accb48ae14c66f1437ec50ed19a0616f78/strings.sol
    function _toString(bytes32[4] _rawBytes, uint256 _stringLength) private constant returns (string) {
      var outputString = new string(_stringLength);
      uint256 outputPtr;
      uint256 bytesPtr;

      assembly {
          outputPtr := add(outputString, 32)
          bytesPtr := _rawBytes
      }

      _memcpy(outputPtr, bytesPtr, _stringLength);

      return outputString;
    }

    /// @notice Returns a URI pointing to a metadata package for this token conforming to
    ///  ERC-721 (https://github.com/ethereum/EIPs/issues/721)
    /// @param _tokenId The ID number of the Kitty whose metadata should be returned.
    function tokenMetadata(uint256 _tokenId, string _preferredTransport) external constant returns (string infoUrl) {
      require(erc721Metadata != address(0));
      bytes32[4] memory buffer;
      uint256 count;
      (buffer, count) = erc721Metadata.getMetadata(_tokenId, _preferredTransport);

      return _toString(buffer, count);
    }

    function withdraw() external onlyOwner {
        owner.transfer(this.balance);
    }
}

// File: contracts/BitpaintingPaintings.sol

contract BitpaintingPaintings is PaintingOwnership, IPaintings {

    event CommissionPaidSuccessfully(
        address _to,
        uint _fromBlock,
        uint _toBlock);

    uint version = 3;

    modifier canPayCommission() {
        require(bitpaintingStorage.isOwner(msg.sender)
            || bitpaintingStorage.isAdmin(msg.sender));
        _;
    }

    function release(
        uint _tokenId,
        uint _artistId,
        uint _releasedAt,
        uint8[] _gens,
        uint _auctionStartingPrice,
        uint _auctionEndingPrice,
        uint _auctionDuration,
        string _artist,
        string _name
    ) external canReleaseArtwork whenNotPaused {
        _createOriginalPainting(_tokenId, _artistId, _releasedAt);
        _approve(_tokenId, owner);
        bitpaintingStorage.setEditionLimits(_tokenId, _gens[0], _gens[1],_gens[2]);
        auctionsContract().createReleaseAuction(
            _tokenId,
            _auctionStartingPrice,
            _auctionEndingPrice,
            _releasedAt,
            _auctionDuration);
        bitpaintingStorage.setPaintingArtist(_tokenId, _artist);
        bitpaintingStorage.setPaintingName(_tokenId, _name);
    }

    function releaseNow(
        uint _tokenId,
        uint _artistId,
        uint8[] _gens,
        uint _auctionStartingPrice,
        uint _auctionEndingPrice,
        uint _auctionDuration,
        string _artist,
        string _name
    ) external canReleaseArtwork whenNotPaused {
        uint _releasedAt = now;
        _createOriginalPainting(_tokenId, _artistId, _releasedAt);
        _approve(_tokenId, owner);
        bitpaintingStorage.setEditionLimits(_tokenId, _gens[0], _gens[1],_gens[2]);
        auctionsContract().createReleaseAuction(
            _tokenId,
            _auctionStartingPrice,
            _auctionEndingPrice,
            now, // _releasedAt
            _auctionDuration);
        bitpaintingStorage.setPaintingArtist(_tokenId, _artist);
        bitpaintingStorage.setPaintingName(_tokenId, _name);
    }

    function cancel(uint _tokenId) external canCancelArtwork whenNotPaused {
        require(bitpaintingStorage.isOnAuction(_tokenId));
        require(bitpaintingStorage.canBeChanged(_tokenId));

        bitpaintingStorage.resetPainting(_tokenId);
        bitpaintingStorage.removeAuction(_tokenId);
        bitpaintingStorage.resetEditionLimits(_tokenId);
        bitpaintingStorage.purgeInformation(_tokenId);
    }

    function auctionsContract() internal returns (IAuctions auctions){
        uint _signature = uint(keccak256("auctions"));
        return IAuctions(bitpaintingStorage.contracts(_signature));
    }

    function createPainting(uint _tokenId)
        external canReleaseArtwork whenNotPaused {
        _createOriginalPainting(_tokenId, 1, now);
        _approve(_tokenId, owner);
    }

    function sendAsGift(address _to, uint _tokenId) external whenNotPaused {
        require(_to != address(0));
        require(_to != address(this));
        require(_owns(msg.sender, _tokenId));
        require(bitpaintingStorage.isReady(_tokenId));
        require(!bitpaintingStorage.hasEditionInProgress(_tokenId));

        if (bitpaintingStorage.isOnAuction(_tokenId)) {
            bitpaintingStorage.removeAuction(_tokenId);
        }

        bitpaintingStorage.sealForChanges(_tokenId);
        _transfer(msg.sender, _to, _tokenId);
        bitpaintingStorage.increaseOwnershipTokenCount(_to);
        bitpaintingStorage.decreaseOwnershipTokenCount(msg.sender);
    }

    function allTokenIds() public constant returns (uint[] tokenIds) {
        uint len = bitpaintingStorage.totalPaintingsCount();
        uint resultLen = bitpaintingStorage.paintingsCount();
        tokenIds = new uint[](resultLen);
        uint pointer = 0;
        for (uint index = 0; index < len; index++) {
            uint token = bitpaintingStorage.getPaintingIdAtIndex(index);
            if (bitpaintingStorage.isCanceled(token)) {
                continue;
            }
            tokenIds[pointer] = token;
            pointer++;
        }
    }

    function collectionOf(address _of) public constant returns (
            uint[] tokens,
            bool[] pending,
            bool[] forSale,
            bool[] locked,
            uint8[] generations,
            uint8[] speeds
        ) {

        uint tokenCount = bitpaintingStorage.totalPaintingsCount();
        uint length = balanceOf(_of);
        uint pointer;

        tokens = new uint[](length);
        pending = new bool[](length);
        forSale = new bool[](length);
        locked = new bool[](length);
        generations = new uint8[](length);
        speeds = new uint8[](length);

        for(uint index = 0; index < tokenCount; index++) {
            uint tokenId = bitpaintingStorage.getPaintingIdAtIndex(index);

            if (_ownerOf(tokenId) != _of) {
                continue;
            }

            uint _createdAt;
            (,,_createdAt,,,) = bitpaintingStorage.getPainting(tokenId);
            if (_createdAt == 0) {
                continue;
            }

            tokens[pointer] = tokenId;
            pending[pointer] = !bitpaintingStorage.isReady(tokenId);
            forSale[pointer] = (bitpaintingStorage.getAuctionStartedAt(tokenId) > 0);
            uint edition = bitpaintingStorage.lastEditionOf(tokenId);
            if (edition == 0) {
                locked[pointer] = false;
            } else {
                locked[pointer] = !bitpaintingStorage.isReady(edition);
            }
            generations[pointer] = bitpaintingStorage.getPaintingGeneration(tokenId);
            speeds[pointer] = bitpaintingStorage.getPaintingSpeed(tokenId);

            pointer++;
        }

    }

    function collectionCountsOf(address _of) public constant
        returns (uint total, uint pending, uint forSale) {
        uint tokenCount = totalSupply();

        for(uint index = 0; index < tokenCount; index++) {
            uint tokenId = bitpaintingStorage.getPaintingIdAtIndex(index);

            if (_ownerOf(tokenId) != _of) {
                continue;
            }

            total++;

            if (bitpaintingStorage.isReady(tokenId)) {
                if (bitpaintingStorage.getAuctionStartedAt(tokenId) > 0) {
                    forSale++;
                }

                continue;
            }

            if (!bitpaintingStorage.isReady(tokenId)) {
                pending++;
                continue;
            }

        }

    }

    function payCommission(address _to, uint _fromBlock, uint _toBlock)
        public payable canPayCommission {
        require(_toBlock < block.number);
        require(_fromBlock <= _toBlock);

        _to.transfer(msg.value);
        CommissionPaidSuccessfully(_to, _fromBlock, _toBlock);
    }


    function signature() external constant returns (uint _signature) {
        return uint(keccak256("paintings"));
    }

}

    Contract ABI  
[{"constant":true,"inputs":[{"name":"_interfaceID","type":"bytes4"}],"name":"supportsInterface","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"_tokenId","type":"uint256"},{"name":"_preferredTransport","type":"string"}],"name":"tokenMetadata","outputs":[{"name":"infoUrl","type":"string"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_tokenId","type":"uint256"}],"name":"approve","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_fromBlock","type":"uint256"},{"name":"_toBlock","type":"uint256"}],"name":"payCommission","outputs":[],"payable":true,"type":"function"},{"constant":true,"inputs":[],"name":"bitpaintingStorage","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"_address","type":"address"}],"name":"canUserCancelArtwork","outputs":[{"name":"_can","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"_address","type":"address"}],"name":"isOwner","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_address","type":"address"}],"name":"setBitpaintingStorage","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_tokenId","type":"uint256"},{"name":"_artistId","type":"uint256"},{"name":"_releasedAt","type":"uint256"},{"name":"_gens","type":"uint8[]"},{"name":"_auctionStartingPrice","type":"uint256"},{"name":"_auctionEndingPrice","type":"uint256"},{"name":"_auctionDuration","type":"uint256"},{"name":"_artist","type":"string"},{"name":"_name","type":"string"}],"name":"release","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[],"name":"withdraw","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"_of","type":"address"}],"name":"collectionOf","outputs":[{"name":"tokens","type":"uint256[]"},{"name":"pending","type":"bool[]"},{"name":"forSale","type":"bool[]"},{"name":"locked","type":"bool[]"},{"name":"generations","type":"uint8[]"},{"name":"speeds","type":"uint8[]"}],"payable":false,"type":"function"},{"constant":false,"inputs":[],"name":"unpause","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_tokenId","type":"uint256"}],"name":"cancel","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"signature","outputs":[{"name":"_signature","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"paused","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"_tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"name":"count","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_tokenId","type":"uint256"},{"name":"_artistId","type":"uint256"},{"name":"_gens","type":"uint8[]"},{"name":"_auctionStartingPrice","type":"uint256"},{"name":"_auctionEndingPrice","type":"uint256"},{"name":"_auctionDuration","type":"uint256"},{"name":"_artist","type":"string"},{"name":"_name","type":"string"}],"name":"releaseNow","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[],"name":"pause","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"tokensOfOwner","outputs":[{"name":"","type":"uint256[]"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"_of","type":"address"}],"name":"collectionCountsOf","outputs":[{"name":"total","type":"uint256"},{"name":"pending","type":"uint256"},{"name":"forSale","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_tokenId","type":"uint256"}],"name":"transfer","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"_address","type":"address"}],"name":"canUserReleaseArtwork","outputs":[{"name":"_can","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"erc721Metadata","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_tokenId","type":"uint256"}],"name":"sendAsGift","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_contractAddress","type":"address"}],"name":"setMetadataAddress","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"allTokenIds","outputs":[{"name":"tokenIds","type":"uint256[]"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_tokenId","type":"uint256"}],"name":"createPainting","outputs":[],"payable":false,"type":"function"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_to","type":"address"},{"indexed":false,"name":"_fromBlock","type":"uint256"},{"indexed":false,"name":"_toBlock","type":"uint256"}],"name":"CommissionPaidSuccessfully","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"from","type":"address"},{"indexed":false,"name":"to","type":"address"},{"indexed":false,"name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"owner","type":"address"},{"indexed":false,"name":"approved","type":"address"},{"indexed":false,"name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_tokenId","type":"uint256"},{"indexed":false,"name":"_owner","type":"address"},{"indexed":false,"name":"_parentId","type":"uint256"},{"indexed":false,"name":"_generation","type":"uint8"},{"indexed":false,"name":"_createdAt","type":"uint256"},{"indexed":false,"name":"_completedAt","type":"uint256"}],"name":"Create","type":"event"},{"anonymous":false,"inputs":[],"name":"Pause","type":"event"},{"anonymous":false,"inputs":[],"name":"Unpause","type":"event"}]

  Contract Creation Code Switch To Opcodes View
60606040526000805460a060020a60ff0219169055600380555b60008054600160a060020a03191633600160a060020a03161790555b5b613741806100456000396000f300606060405236156101905763ffffffff60e060020a60003504166301ffc9a781146101955780630560ff44146101e157806306fdde031461027b578063095ea7b3146103065780630a52d1941461032a578063179047431461034657806318160ddd1461037557806323b872dd1461039a578063290b3cb7146103c45780632f54bf6e146103f7578063362f29c91461042a57806338284f361461044b5780633ccfd60b1461049c5780633e94c904146104b15780633f4ba83a1461068357806340e58ee51461069857806351ff4847146106b05780635c975abb146106d55780636352211e146106fc57806370a082311461072e5780637984932e1461075f5780638456cb59146107ab5780638462151c146107c05780638da5cb5b1461083357806395d89b41146108625780639d5c7be8146108ed578063a9059cbb14610930578063aad9973f14610954578063bc4006f514610987578063c7046117146109b6578063e17b25af146109da578063e7619fad146109fb578063f2fde38b14610a62578063fe5709cd14610a83575b600080fd5b34156101a057600080fd5b6101cd7fffffffff0000000000000000000000000000000000000000000000000000000060043516610a9b565b604051901515815260200160405180910390f35b34156101ec57600080fd5b610203600480359060248035908101910135610d22565b60405160208082528190810183818151815260200191508051906020019080838360005b838110156102405780820151818401525b602001610227565b50505050905090810190601f16801561026d5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561028657600080fd5b610203610e01565b60405160208082528190810183818151815260200191508051906020019080838360005b838110156102405780820151818401525b602001610227565b50505050905090810190601f16801561026d5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561031157600080fd5b610328600160a060020a0360043516602435610e38565b005b610328600160a060020a0360043516602435604435610ec4565b005b341561035157600080fd5b610359611069565b604051600160a060020a03909116815260200160405180910390f35b341561038057600080fd5b610388611078565b60405190815260200160405180910390f35b34156103a557600080fd5b610328600160a060020a03600435811690602435166044356110e2565b005b34156103cf57600080fd5b6101cd600160a060020a036004351661110b565b604051901515815260200160405180910390f35b341561040257600080fd5b6101cd600160a060020a0360043516611204565b604051901515815260200160405180910390f35b341561043557600080fd5b610328600160a060020a036004351661121b565b005b341561045657600080fd5b61032860048035906024803591604435916064358082019290810135916084359160a4359160c4359160e43580830192908201359161010435918201910135611278565b005b34156104a757600080fd5b610328611514565b005b34156104bc57600080fd5b6104d0600160a060020a036004351661156c565b6040518080602001806020018060200180602001806020018060200187810387528d818151815260200191508051906020019060200280838360005b838110156105255780820151818401525b60200161050c565b5050505090500187810386528c818151815260200191508051906020019060200280838360005b838110156105655780820151818401525b60200161054c565b5050505090500187810385528b818151815260200191508051906020019060200280838360005b838110156105a55780820151818401525b60200161058c565b5050505090500187810384528a818151815260200191508051906020019060200280838360005b838110156105e55780820151818401525b6020016105cc565b50505050905001878103835289818151815260200191508051906020019060200280838360005b838110156106255780820151818401525b60200161060c565b50505050905001878103825288818151815260200191508051906020019060200280838360005b838110156106655780820151818401525b60200161064c565b505050509050019c5050505050505050505050505060405180910390f35b341561068e57600080fd5b610328611ba2565b005b34156106a357600080fd5b610328600435611c62565b005b34156106bb57600080fd5b610388611ef4565b60405190815260200160405180910390f35b34156106e057600080fd5b6101cd611f2e565b604051901515815260200160405180910390f35b341561070757600080fd5b610359600435611f3e565b604051600160a060020a03909116815260200160405180910390f35b341561073957600080fd5b610388600160a060020a0360043516611f51565b60405190815260200160405180910390f35b341561076a57600080fd5b61032860048035906024803591604435808301929082013591606435916084359160a4359160c43580820192908101359160e435908101910135611fce565b005b34156107b657600080fd5b61032861226e565b005b34156107cb57600080fd5b6107df600160a060020a036004351661232d565b60405160208082528190810183818151815260200191508051906020019060200280838360005b8381101561081f5780820151818401525b602001610806565b505050509050019250505060405180910390f35b341561083e57600080fd5b61035961246e565b604051600160a060020a03909116815260200160405180910390f35b341561086d57600080fd5b61020361247d565b60405160208082528190810183818151815260200191508051906020019080838360005b838110156102405780820151818401525b602001610227565b50505050905090810190601f16801561026d5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34156108f857600080fd5b61090c600160a060020a03600435166124b4565b60405180848152602001838152602001828152602001935050505060405180910390f35b341561093b57600080fd5b610328600160a060020a03600435166024356126ec565b005b341561095f57600080fd5b6101cd600160a060020a036004351661275f565b604051901515815260200160405180910390f35b341561099257600080fd5b6103596128d3565b604051600160a060020a03909116815260200160405180910390f35b34156109c157600080fd5b610328600160a060020a03600435166024356128e2565b005b34156109e557600080fd5b610328600160a060020a0360043516612c35565b005b3415610a0657600080fd5b6107df612c7d565b60405160208082528190810183818151815260200191508051906020019060200280838360005b8381101561081f5780820151818401525b602001610806565b505050509050019250505060405180910390f35b3415610a6d57600080fd5b610328600160a060020a0360043516612ea4565b005b3415610a8e57600080fd5b610328600435612f01565b005b60006040517f737570706f727473496e7465726661636528627974657334290000000000000081526019016040518091039020600160e060020a03191682600160e060020a0319161480610d1a57506040517f746f6b656e4d657461646174612875696e743235362c737472696e67290000008152601d0160405180910390206040517f746f6b656e734f664f776e657228616464726573732900000000000000000000815260160160405180910390206040517f7472616e7366657246726f6d28616464726573732c616464726573732c75696e81527f7432353629000000000000000000000000000000000000000000000000000000602082015260250160405180910390206040517f7472616e7366657228616464726573732c75696e743235362900000000000000815260190160405180910390206040517f617070726f766528616464726573732c75696e74323536290000000000000000815260180160405180910390206040517f6f776e65724f662875696e743235362900000000000000000000000000000000815260100160405180910390206040517f62616c616e63654f662861646472657373290000000000000000000000000000815260120160405180910390206040517f746f74616c537570706c792829000000000000000000000000000000000000008152600d0160405180910390206040517f73796d626f6c2829000000000000000000000000000000000000000000000000815260080160405180910390206040517f6e616d652829000000000000000000000000000000000000000000000000000081526006016040518091039020181818181818181818600160e060020a03191682600160e060020a031916145b90505b919050565b610d2a6136a4565b610d326136b6565b600254600090600160a060020a03161515610d4c57600080fd5b600254600160a060020a031663cb4799f2878787600060405160a0015260405160e060020a63ffffffff861602815260048101848152604060248301908152604483018490529091606401848480828437820191505094505050505060a060405180830381600087803b1515610dc157600080fd5b6102c65a03f11515610dd257600080fd5b50505060405180608001805160209091016040529092509050610df58282612f55565b92505b50509392505050565b60408051908101604052600c81527f4269745061696e74696e67730000000000000000000000000000000000000000602082015281565b60005460a060020a900460ff1615610e4f57600080fd5b610e593382612faa565b1515610e6457600080fd5b610e6e818361302f565b7f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925338383604051600160a060020a039384168152919092166020820152604080820192909252606001905180910390a15b5b5050565b600154600160a060020a0316632f54bf6e3360006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b1515610f1d57600080fd5b6102c65a03f11515610f2e57600080fd5b5050506040518051905080610fb35750600154600160a060020a03166324d7806c3360006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b1515610f9757600080fd5b6102c65a03f11515610fa857600080fd5b505050604051805190505b1515610fbe57600080fd5b438110610fca57600080fd5b80821115610fd757600080fd5b600160a060020a0383163480156108fc0290604051600060405180830381858888f19350505050151561100957600080fd5b7f5ce0713bdae07b19c9fe8119bee321b8b425f4981de47ef807bf8e2c340258968383836040518084600160a060020a0316600160a060020a03168152602001838152602001828152602001935050505060405180910390a15b5b505050565b600154600160a060020a031681565b600154600090600160a060020a031663197b945482604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156110c257600080fd5b6102c65a03f115156110d357600080fd5b50505060405180519150505b90565b60005460a060020a900460ff16156110f957600080fd5b61106383838361309f565b5b5b505050565b600154600090600160a060020a0316632f54bf6e83836040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561116657600080fd5b6102c65a03f1151561117757600080fd5b5050506040518051905080610d1a5750600154600160a060020a03166324d7806c8360006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b15156111e057600080fd5b6102c65a03f115156111f157600080fd5b505050604051805190505b90505b919050565b600054600160a060020a038281169116145b919050565b60005433600160a060020a0390811691161461123657600080fd5b600160a060020a038116151561124b57600080fd5b6001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0383161790555b5b50565b6112813361275f565b151561128c57600080fd5b60005460a060020a900460ff16156112a357600080fd5b6112ae8c8c8c613128565b6000546112c5908d90600160a060020a031661302f565b600154600160a060020a031663783370b58d8b8b60008181106112e457fe5b9050602002013560ff168c8c600181811015156112fd57fe5b9050602002013560ff168d8d6002818110151561131657fe5b9050602002013560ff1660405160e060020a63ffffffff8716028152600481019490945260ff92831660248501529082166044840152166064820152608401600060405180830381600087803b151561136e57600080fd5b6102c65a03f1151561137f57600080fd5b50505061138a613152565b600160a060020a031663f26539668d89898e8a60405160e060020a63ffffffff88160281526004810195909552602485019390935260448401919091526064830152608482015260a401600060405180830381600087803b15156113ed57600080fd5b6102c65a03f115156113fe57600080fd5b5050600154600160a060020a0316905063d59f4e688d868660405160e060020a63ffffffff8616028152600481018481526040602483019081526044830184905290916064018484808284378201915050945050505050600060405180830381600087803b151561146e57600080fd5b6102c65a03f1151561147f57600080fd5b5050600154600160a060020a0316905063fabb79528d848460405160e060020a63ffffffff8616028152600481018481526040602483019081526044830184905290916064018484808284378201915050945050505050600060405180830381600087803b15156114ef57600080fd5b6102c65a03f1151561150057600080fd5b5050505b5b5b505050505050505050505050565b60005433600160a060020a0390811691161461152f57600080fd5b600054600160a060020a039081169030163180156108fc0290604051600060405180830381858888f19350505050151561156857600080fd5b5b5b565b6115746136a4565b61157c6136a4565b6115846136a4565b61158c6136a4565b6115946136a4565b61159c6136a4565b600154600090819081908190819081908190600160a060020a0316632efd08df82604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156115f257600080fd5b6102c65a03f1151561160357600080fd5b5050506040518051905096506116188e611f51565b9550856040518059106116285750595b908082528060200260200182016040525b509c508560405180591061164a5750595b908082528060200260200182016040525b509b508560405180591061166c5750595b908082528060200260200182016040525b509a508560405180591061168e5750595b908082528060200260200182016040525b509950856040518059106116b05750595b908082528060200260200182016040525b509850856040518059106116d25750595b908082528060200260200182016040525b509750600093505b86841015611b9157600154600160a060020a031663a3e7061d8560006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b151561174457600080fd5b6102c65a03f1151561175557600080fd5b5050506040518051935050600160a060020a038e16611773846131fc565b600160a060020a03161461178657611b86565b600154600160a060020a031663145f8ba284600060405160c0015260405160e060020a63ffffffff8416028152600481019190915260240160c060405180830381600087803b15156117d757600080fd5b6102c65a03f115156117e857600080fd5b5050506040518051906020018051906020018051906020018051906020018051906020018051509296505050841515925061182591505057611b86565b828d868151811061183257fe5b60209081029091010152600154600160a060020a03166350df8f718460006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b151561188d57600080fd5b6102c65a03f1151561189e57600080fd5b50505060405180519050158c86815181106118b557fe5b911515602092830290910190910152600154600090600160a060020a03166337016a5f85836040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b151561191757600080fd5b6102c65a03f1151561192857600080fd5b50505060405180519050118b868151811061193f57fe5b911515602092830290910190910152600154600160a060020a031663f50b769e8460006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b151561199f57600080fd5b6102c65a03f115156119b057600080fd5b50505060405180519150508015156119e45760008a86815181106119d057fe5b911515602092830290910190910152611a6d565b600154600160a060020a03166350df8f718260006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b1515611a3557600080fd5b6102c65a03f11515611a4657600080fd5b50505060405180519050158a8681518110611a5d57fe5b9115156020928302909101909101525b600154600160a060020a0316630af9d89c8460006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b1515611abe57600080fd5b6102c65a03f11515611acf57600080fd5b50505060405180519050898681518110611ae557fe5b60ff909216602092830290910190910152600154600160a060020a0316639ed573608460006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b1515611b4757600080fd5b6102c65a03f11515611b5857600080fd5b50505060405180519050888681518110611b6e57fe5b60ff9092166020928302909101909101526001909401935b6001909301926116eb565b5b5050505050505091939550919395565b60005433600160a060020a0390811691161480611c325750600154600160a060020a031663ca4b208b6000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515611c0257600080fd5b6102c65a03f11515611c1357600080fd5b50505060405180519050600160a060020a031633600160a060020a0316145b1515611c3d57600080fd5b60005460a060020a900460ff161515611c5557600080fd5b611568613271565b5b5b5b565b611c6b3361110b565b1515611c7657600080fd5b60005460a060020a900460ff1615611c8d57600080fd5b600154600160a060020a03166337e246ad8260006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b1515611cde57600080fd5b6102c65a03f11515611cef57600080fd5b505050604051805190501515611d0457600080fd5b600154600160a060020a0316637d6979e78260006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b1515611d5557600080fd5b6102c65a03f11515611d6657600080fd5b505050604051805190501515611d7b57600080fd5b600154600160a060020a0316638635b5278260405160e060020a63ffffffff84160281526004810191909152602401600060405180830381600087803b1515611dc357600080fd5b6102c65a03f11515611dd457600080fd5b5050600154600160a060020a03169050632dd7030b8260405160e060020a63ffffffff84160281526004810191909152602401600060405180830381600087803b1515611e2057600080fd5b6102c65a03f11515611e3157600080fd5b5050600154600160a060020a03169050634a61f3478260405160e060020a63ffffffff84160281526004810191909152602401600060405180830381600087803b1515611e7d57600080fd5b6102c65a03f11515611e8e57600080fd5b5050600154600160a060020a0316905063a61bd76d8260405160e060020a63ffffffff84160281526004810191909152602401600060405180830381600087803b1515611eda57600080fd5b6102c65a03f11515611eeb57600080fd5b5050505b5b5b50565b60006040517f7061696e74696e67730000000000000000000000000000000000000000000000815260090160405190819003902090505b90565b60005460a060020a900460ff1681565b6000610d1a826131fc565b90505b919050565b600154600090600160a060020a031663b4f6eae483836040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b15156111e057600080fd5b6102c65a03f115156111f157600080fd5b50505060405180519150505b919050565b6000611fd93361275f565b1515611fe457600080fd5b60005460a060020a900460ff1615611ffb57600080fd5b50426120088c8c83613128565b60005461201f908d90600160a060020a031661302f565b600154600160a060020a031663783370b58d8c8c600081811061203e57fe5b9050602002013560ff168d8d6001818110151561205757fe5b9050602002013560ff168e8e6002818110151561207057fe5b9050602002013560ff1660405160e060020a63ffffffff8716028152600481019490945260ff92831660248501529082166044840152166064820152608401600060405180830381600087803b15156120c857600080fd5b6102c65a03f115156120d957600080fd5b5050506120e4613152565b600160a060020a031663f26539668d8a8a428b60405160e060020a63ffffffff88160281526004810195909552602485019390935260448401919091526064830152608482015260a401600060405180830381600087803b151561214757600080fd5b6102c65a03f1151561215857600080fd5b5050600154600160a060020a0316905063d59f4e688d878760405160e060020a63ffffffff8616028152600481018481526040602483019081526044830184905290916064018484808284378201915050945050505050600060405180830381600087803b15156121c857600080fd5b6102c65a03f115156121d957600080fd5b5050600154600160a060020a0316905063fabb79528d858560405160e060020a63ffffffff8616028152600481018481526040602483019081526044830184905290916064018484808284378201915050945050505050600060405180830381600087803b15156114ef57600080fd5b6102c65a03f1151561150057600080fd5b5050505b5b5b505050505050505050505050565b60005433600160a060020a03908116911614806122fe5750600154600160a060020a031663ca4b208b6000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156122ce57600080fd5b6102c65a03f115156122df57600080fd5b50505060405180519050600160a060020a031633600160a060020a0316145b151561230957600080fd5b60005460a060020a900460ff161561232057600080fd5b6115686132d7565b5b5b5b565b6123356136a4565b600061233f6136a4565b600080600061234d87611f51565b945084151561237e5760006040518059106123655750595b908082528060200260200182016040525b509550612464565b8460405180591061238c5750595b908082528060200260200182016040525b5093506123a8611078565b925060009150600190505b82811161246057600154600160a060020a038089169116630d66343c8360006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b151561240f57600080fd5b6102c65a03f1151561242057600080fd5b50505060405180519050600160a060020a03161415612457578084838151811061244657fe5b602090810290910101526001909101905b5b6001016123b3565b8395505b5050505050919050565b600054600160a060020a031681565b60408051908101604052600281527f4250000000000000000000000000000000000000000000000000000000000000602082015281565b6000806000806000806124c5611078565b9250600091505b828210156126e157600154600160a060020a031663a3e7061d8360006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b151561252557600080fd5b6102c65a03f1151561253657600080fd5b5050506040518051915050600160a060020a038716612554826131fc565b600160a060020a031614612567576126d5565b60018054960195600160a060020a03166350df8f718260006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b15156125bc57600080fd5b6102c65a03f115156125cd57600080fd5b505050604051805190501561265c57600154600090600160a060020a03166337016a5f83836040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b151561262f57600080fd5b6102c65a03f1151561264057600080fd5b505050604051805190501115612657576001909301925b6126d5565b600154600160a060020a03166350df8f718260006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b15156126ad57600080fd5b6102c65a03f115156126be57600080fd5b5050506040518051905015156126d5576001909401935b5b6001909101906124cc565b5b5050509193909250565b60005460a060020a900460ff161561270357600080fd5b600160a060020a038216151561271857600080fd5b30600160a060020a031682600160a060020a03161415151561273957600080fd5b6127433382612faa565b151561274e57600080fd5b610ebf338383613342565b5b5b5050565b600154600090600160a060020a0316632f54bf6e83836040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b15156127ba57600080fd5b6102c65a03f115156127cb57600080fd5b50505060405180519050806128505750600154600160a060020a03166324d7806c8360006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561283457600080fd5b6102c65a03f1151561284557600080fd5b505050604051805190505b80610d1a5750600154600160a060020a031663babcc5398360006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b15156111e057600080fd5b6102c65a03f115156111f157600080fd5b505050604051805190505b90505b919050565b600254600160a060020a031681565b60005460a060020a900460ff16156128f957600080fd5b600160a060020a038216151561290e57600080fd5b30600160a060020a031682600160a060020a03161415151561292f57600080fd5b6129393382612faa565b151561294457600080fd5b600154600160a060020a03166350df8f718260006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b151561299557600080fd5b6102c65a03f115156129a657600080fd5b5050506040518051905015156129bb57600080fd5b600154600160a060020a0316635f4eab658260006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b1515612a0c57600080fd5b6102c65a03f11515612a1d57600080fd5b5050506040518051159050612a3157600080fd5b600154600160a060020a03166337e246ad8260006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b1515612a8257600080fd5b6102c65a03f11515612a9357600080fd5b5050506040518051905015612aff57600154600160a060020a0316632dd7030b8260405160e060020a63ffffffff84160281526004810191909152602401600060405180830381600087803b1515612aea57600080fd5b6102c65a03f11515612afb57600080fd5b5050505b600154600160a060020a0316631e801c8c8260405160e060020a63ffffffff84160281526004810191909152602401600060405180830381600087803b1515612b4757600080fd5b6102c65a03f11515612b5857600080fd5b505050612b66338383613342565b600154600160a060020a0316636bfaa9038360405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401600060405180830381600087803b1515612bb657600080fd5b6102c65a03f11515612bc757600080fd5b5050600154600160a060020a03169050631be6ce573360405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401600060405180830381600087803b1515612c1b57600080fd5b6102c65a03f11515612c2c57600080fd5b5050505b5b5050565b60005433600160a060020a03908116911614612c5057600080fd5b6002805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0383161790555b5b50565b612c856136a4565b6001546000908190819081908190600160a060020a0316632efd08df82604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515612cd757600080fd5b6102c65a03f11515612ce857600080fd5b5050506040518051600154909650600160a060020a0316905063197b94546000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515612d3d57600080fd5b6102c65a03f11515612d4e57600080fd5b50505060405180519050935083604051805910612d685750595b908082528060200260200182016040525b50955060009250600091505b84821015612e9b57600154600160a060020a031663a3e7061d8360006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b1515612dde57600080fd5b6102c65a03f11515612def57600080fd5b5050506040518051600154909250600160a060020a031690506339e3af9b8260006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b1515612e4d57600080fd5b6102c65a03f11515612e5e57600080fd5b5050506040518051905015612e7257612e90565b80868481518110612e7f57fe5b602090810290910101526001909201915b600190910190612d85565b5b505050505090565b60005433600160a060020a03908116911614612ebf57600080fd5b600160a060020a0381161515612ed457600080fd5b6000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0383161790555b5b50565b612f0a3361275f565b1515612f1557600080fd5b60005460a060020a900460ff1615612f2c57600080fd5b612f3881600142613128565b600054611274908290600160a060020a031661302f565b5b5b5b50565b612f5d6136a4565b612f656136a4565b60008084604051805910612f765750595b908082528060200260200182016040525b5092505060208201905084612f9d828287613403565b8293505b50505092915050565b600154600090600160a060020a038085169116630d66343c84846040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b151561300157600080fd5b6102c65a03f1151561301257600080fd5b50505060405180519050600160a060020a03161490505b92915050565b600154600160a060020a031663febe4909838360405160e060020a63ffffffff85160281526004810192909252600160a060020a03166024820152604401600060405180830381600087803b1515612c1b57600080fd5b6102c65a03f11515612c2c57600080fd5b5050505b5050565b60005460a060020a900460ff16156130b657600080fd5b600160a060020a03821615156130cb57600080fd5b30600160a060020a031682600160a060020a0316141515156130ec57600080fd5b6130f6338261344a565b151561310157600080fd5b61310b8382612faa565b151561311657600080fd5b611063838383613342565b5b5b505050565b60008054600160a060020a03169080600a61314884888480858b8b6134cf565b5b50505050505050565b6000806040517f61756374696f6e730000000000000000000000000000000000000000000000008152600801604051908190039020600154909150600160a060020a031663474da79a8260006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b15156131db57600080fd5b6102c65a03f115156131ec57600080fd5b50505060405180519250505b5090565b600154600090600160a060020a0316630d66343c83836040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b15156111e057600080fd5b6102c65a03f115156111f157600080fd5b50505060405180519150505b919050565b60005460a060020a900460ff16151561328957600080fd5b6000805474ff0000000000000000000000000000000000000000191690557f7805862f689e2f13df9f062ff482ad3ad112aca9e0847911ed832e158c525b3360405160405180910390a15b5b565b60005460a060020a900460ff16156132ee57600080fd5b6000805474ff0000000000000000000000000000000000000000191660a060020a1790557f6985a02210a168e66602d3235cb6db0e70f92b3ba4d376a33c0f3d9434bff62560405160405180910390a15b5b565b600154600160a060020a031663687c4fa7828460405160e060020a63ffffffff85160281526004810192909252600160a060020a03166024820152604401600060405180830381600087803b151561339957600080fd5b6102c65a03f115156133aa57600080fd5b5050507fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef838383604051600160a060020a039384168152919092166020820152604080820192909252606001905180910390a15b505050565b60005b6020821061342a57825184526020840193506020830192505b602082039150613406565b6001826020036101000a0390508019835116818551161784525b50505050565b600154600090600160a060020a031663b5b12e758385846040516020015260405160e060020a63ffffffff85160281526004810192909252600160a060020a03166024820152604401602060405180830381600087803b15156134ac57600080fd5b6102c65a03f115156134bd57600080fd5b50505060405180519150505b92915050565b60008063ffffffff881688146134e457600080fd5b63ffffffff871687146134f657600080fd5b5b600154600160a060020a0316638754b1d18a8a8a8a8a8a8a60405160e060020a63ffffffff8a16028152600160a060020a0390971660048801526024870195909552604486019390935260ff918216606486015216608484015260a483015260c482015260e401600060405180830381600087803b151561357757600080fd5b6102c65a03f1151561358857600080fd5b5050600154600160a060020a0316905063145f8ba289600060405160c0015260405160e060020a63ffffffff8416028152600481019190915260240160c060405180830381600087803b15156135dd57600080fd5b6102c65a03f115156135ee57600080fd5b5050506040518051906020018051906020018051906020018051906020018051906020018051509296509094507f30327159df74d598a666b3800d1708fc84a7a52e5f6fb58cdd4bdffe7ad653c793508b92508c91508a9050898686604051958652600160a060020a03909416602086015260408086019390935260ff9091166060850152608084015260a083019190915260c0909101905180910390a161369860008a8a613342565b5b505050505050505050565b60206040519081016040526000815290565b60806040519081016040526004815b600081526000199190910190602001816136c55790505090565b60206040519081016040526000815290565b60206040519081016040526000815290565b602060405190810160405260008152905600a165627a7a72305820c0ea2fa0388529abf07d63e43f301f8796c232745c5992c476a6b5d28d30a2510029

   Swarm Source:
bzzr://c0ea2fa0388529abf07d63e43f301f8796c232745c5992c476a6b5d28d30a251

 

View All
Block Age transaction Difficulty GasUsed Reward
View All
Block Age UncleNumber Difficulty GasUsed Reward
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.