Sponsored:   VC, TLDR and CoinBene Funded "TEMCO: Bitcoin Network (RSK) Suppy Chain! Whitelist KYC Starts Now!!"
Contract Overview
Balance: 0 Ether
Ether Value: $0
Transactions: 51 txns
Token Tracker: BitPaintings (BP)
Misc:
Address Watch: Add To Watch List
Contract Creator: 0x184d7e44440963d7e8ca8c04f0c6234ffb98db40at txn 0x47abe44d891375be738c7443e033b8154a3c4fea31844eb1d3ad051c48230e69
 Latest 25 transactions from a total of 51 transactions

TxHash Age From To Value [TxFee]
0x29676e85572bdfeac8fda56b6573e2c548ebfc2b2ea3b4891923ac1a56eecd1c100 days 20 hrs ago0x07b3f86e1024b6367e045c600c880a9554642932  IN   0x6ad9c45c7d058aa8568329fb58ced0a35e249b6d0 Ether0.00248454
0x8ef706e2222d2c8dcf1a95be22864868e79e421b502dea9043f6948c14c03a0e172 days 7 hrs ago0xa1345a9139e2679d952a8c7c4b2aacc7fbcc7872  IN   0x6ad9c45c7d058aa8568329fb58ced0a35e249b6d0 Ether0.00383962
0x620a4eec041e44df53c3b777c4ee5c477d7e7eeee3b56fa2f778c4b83f48e773173 days 2 hrs ago0x00668305a5dabe522f7340842e318a8b5c5609ff  IN   0x6ad9c45c7d058aa8568329fb58ced0a35e249b6d0 Ether0.008274
0x7c0e50c6d6c9ada6823c3568aea1c02974bdce2ae00d06b575d207ae6badad40173 days 6 hrs ago0xa1345a9139e2679d952a8c7c4b2aacc7fbcc7872  IN   0x6ad9c45c7d058aa8568329fb58ced0a35e249b6d0 Ether0.0041409
0x24348102671179ba85452aa82f551f57a8cd05ae22740d3871fbe5c84e20740d174 days 2 hrs ago0xcdb100434095e0ec0cbbd8d0d77f114b8eece541  IN   0x6ad9c45c7d058aa8568329fb58ced0a35e249b6d0 Ether0.000767924
0xd44f9789e3db37f550eb0473174a09c0775d250cbd8818ccdb725f2e7f2f88d2175 days 2 hrs ago0xcdb100434095e0ec0cbbd8d0d77f114b8eece541  IN   0x6ad9c45c7d058aa8568329fb58ced0a35e249b6d0 Ether0.0008274
0x0326ea428f857e4a5c7f24c18439c5043050cc69428ab91b60e4aebd1ef5b9ff181 days 23 hrs ago0xcdb100434095e0ec0cbbd8d0d77f114b8eece541  IN   0x6ad9c45c7d058aa8568329fb58ced0a35e249b6d0 Ether0.00384012
0xcb8904a0a20bce22f455a824b31e7b903dabd25c96564ea486073bcddc19d070181 days 23 hrs ago0xcdb100434095e0ec0cbbd8d0d77f114b8eece541  IN   0x6ad9c45c7d058aa8568329fb58ced0a35e249b6d0 Ether0.0041409
0x5f0898f0a450fe74512ad08e1d79a3d8103bbc8cc5586f9b4b223957d3e2b0cf181 days 23 hrs ago0xcdb100434095e0ec0cbbd8d0d77f114b8eece541  IN   0x6ad9c45c7d058aa8568329fb58ced0a35e249b6d0 Ether0.00383962
0xf7502ce36e2d467ed0cdd16e441122d3eec23aa70b5df0c779cf90bc94da4376183 days 56 mins ago0xcdb100434095e0ec0cbbd8d0d77f114b8eece541  IN   0x6ad9c45c7d058aa8568329fb58ced0a35e249b6d0 Ether0.0008274
0x79c30a1304fb18ee5cd2d54e7566bddea937d2dc5004f915180cf5fadece24df183 days 18 hrs ago0x6286ba5e54efd90b3a32aa7bb3a5a0bdb4b48981  IN   0x6ad9c45c7d058aa8568329fb58ced0a35e249b6d0 Ether0.0008274
0x093498b4e1ad75350a79c217377c37293599e31617b5eb6e201bec70f9ec2f13188 days 1 hr ago0xcdb100434095e0ec0cbbd8d0d77f114b8eece541  IN   0x6ad9c45c7d058aa8568329fb58ced0a35e249b6d0 Ether0.002687734
0x1862e25f205656dc6b9fc1c698870ce26db939ed0262fc700056bf4768fa539a188 days 2 hrs ago0xcdb100434095e0ec0cbbd8d0d77f114b8eece541  IN   0x6ad9c45c7d058aa8568329fb58ced0a35e249b6d0 Ether0.001729809
0x1d9523ee2842d439d888410a0d5d9ecc30d177e16b3d49d411c87ee5fe69a6aa189 days 1 hr ago0xcdb100434095e0ec0cbbd8d0d77f114b8eece541  IN   0x6ad9c45c7d058aa8568329fb58ced0a35e249b6d0 Ether0.0016548
0xe31f0407da2e46373326d4438e0d509dcbd73a0d5068e748a1c1fb70a6f09666191 days 23 hrs ago0xcdb100434095e0ec0cbbd8d0d77f114b8eece541  IN   0x6ad9c45c7d058aa8568329fb58ced0a35e249b6d0 Ether0.00192176
0x40ae1c267227ee12388ab3e5aa3dbebff2f2a56c60be49f33e91e56d33492a1a192 days 23 hrs ago0xcdb100434095e0ec0cbbd8d0d77f114b8eece541  IN   0x6ad9c45c7d058aa8568329fb58ced0a35e249b6d0 Ether0.00207045
0x4971c4158f0c1030e00bbf087ad6e03d54286e02d8573203b391fedd12fca64a193 days 34 mins ago0xb70d6d091ad3b48efcb979c774259d76f0cbe0cd  IN   0x6ad9c45c7d058aa8568329fb58ced0a35e249b6d0 Ether0.00191981
0xf54031fbbbfb2892004696cdce1611a53dbfd5fe7ee8a59726a17e2571c59e22193 days 14 hrs ago0xcdb100434095e0ec0cbbd8d0d77f114b8eece541  IN   0x6ad9c45c7d058aa8568329fb58ced0a35e249b6d0 Ether0.0034976032
0x3061b4c5091a2360a34219daa9d9d0e0841a0a2ae44d6e4d44a6a183faf2fcea193 days 23 hrs ago0x53562e8ecee54356dc89ad263a444528b34d6c80  IN   0x6ad9c45c7d058aa8568329fb58ced0a35e249b6d0 Ether0.0049644
0xa3d1c5fbaf26d020208b7cb04684c30021c3761fc94e9918235d833296fe9391194 days 35 mins ago0xb70d6d091ad3b48efcb979c774259d76f0cbe0cd  IN   0x6ad9c45c7d058aa8568329fb58ced0a35e249b6d0 Ether0.003044423605
0x4ca180d439367fbcf0ae2e73aa1463a1a1ad08dd61544fa8d2660bc3e0de3b35194 days 1 hr ago0xb70d6d091ad3b48efcb979c774259d76f0cbe0cd  IN   0x6ad9c45c7d058aa8568329fb58ced0a35e249b6d0 Ether0.002687734
0xd0e6037bb2954c023eb391aad913cb5b07d53a396e46776acf7162ece2b96faa194 days 1 hr ago0xb70d6d091ad3b48efcb979c774259d76f0cbe0cd  IN   0x6ad9c45c7d058aa8568329fb58ced0a35e249b6d0 Ether0.003810177
0xac91db32366123838c4551cd190ccf647211c49da5b2e6bf752c5f3a365fec29194 days 15 hrs ago0xcdb100434095e0ec0cbbd8d0d77f114b8eece541  IN   0x6ad9c45c7d058aa8568329fb58ced0a35e249b6d0 Ether0.00207045
0xfb6a39ab0379b2af60b87579dee5591169387c36b636682705301dc1bd87a70c194 days 21 hrs ago0xcdb100434095e0ec0cbbd8d0d77f114b8eece541  IN   0x6ad9c45c7d058aa8568329fb58ced0a35e249b6d0 Ether0.0088656669
0xe19e10f623a7b941e5668c14ab2e117a7d552a0dfa30baeba9e28e7a30c730b9194 days 22 hrs ago0xb70d6d091ad3b48efcb979c774259d76f0cbe0cd  IN   0x6ad9c45c7d058aa8568329fb58ced0a35e249b6d0 Ether0.0191981
[ 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), NestedArrayFunctionCallDecoder (medium-severity), ZeroFunctionSelector (very low-severity) SolidityCompiler Bugs.

Contract Source Code Verified (Exact Match)
Contract Name: BitpaintingEditions
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/IEditions.sol

contract IEditions {

    function createEdition(uint _tokenId) external;
    function pendingEditionsOf(address _of) public constant returns (
        uint[] tokens,
        uint[] startedAt,
        uint[] completedAt,
        uint8[] currentCounts,
        uint8[] limitCounts
    );
    function counter(uint _tokenId) public
        constant returns (uint8 current, uint8 limit);
    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/BitpaintingEditions.sol

contract BitpaintingEditions is PaintingOwnership, IEditions {

    event EditionCreated(
        address creator,
        uint parentId,
        uint editionId,
        uint8 parentSpeed);

    function createEdition(uint _tokenId) external whenNotPaused {
        address creator = msg.sender;
        require(creator == _ownerOf(_tokenId));
        require(bitpaintingStorage.isReady(_tokenId));
        require(!bitpaintingStorage.hasEditionInProgress(_tokenId));
        require(bitpaintingStorage.hasEmptyEditionSlots(_tokenId));
        require(!bitpaintingStorage.isOnAuction(_tokenId));

        bitpaintingStorage.createEditionMeta(_tokenId);
        uint editionId = bitpaintingStorage.getOffsetIndex();
        uint8 _generation =
            bitpaintingStorage.getPaintingGeneration(_tokenId) + 1;
        uint8 _speed = 10;
        uint _artistId = bitpaintingStorage.getPaintingArtistId(_tokenId);
        _createPainting(creator, editionId, _tokenId, _generation, _speed, _artistId, now + 1);
        bitpaintingStorage.decreaseSpeed(_tokenId);

        uint8 speed = bitpaintingStorage.getPaintingSpeed(_tokenId);
        EditionCreated(creator, _tokenId, editionId, speed);
    }

    function pendingEditionsOf(address _of) public constant returns (
            uint[] tokens,
            uint[] startedAt,
            uint[] completedAt,
            uint8[] currentCounts,
            uint8[] limitCounts
        ) {

        uint tokenCount = totalSupply();
        uint length = balanceOf(_of);
        uint pointer;

        tokens = new uint[](length);
        startedAt = new uint[](length);
        completedAt = new uint[](length);
        currentCounts = new uint8[](length);
        limitCounts = new uint8[](length);

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

            if (tokenId == 0) {
                continue;
            }

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

            if (bitpaintingStorage.isReady(tokenId)) {
                continue;
            }

            uint _startedAt;
            uint _completedAt;
            (,,_startedAt, _completedAt,,) = bitpaintingStorage.getPainting(tokenId);
            uint8 _current;
            uint8 _limit;
            (_current, _limit) = counter(tokenId);

            tokens[pointer] = tokenId;
            startedAt[pointer] = _startedAt;
            completedAt[pointer] = _completedAt;
            currentCounts[pointer] = _current;
            limitCounts[pointer] = _limit;

            pointer++;
        }
    }

    function counter(uint _tokenId) public
        constant returns (uint8 current, uint8 limit) {

        uint8 gen = bitpaintingStorage.getPaintingGeneration(_tokenId);
        if (gen == 0) {
            current = 1;
            limit = 1;
        } else {
            uint original = bitpaintingStorage.getPaintingOriginal(_tokenId);
            uint8[3] memory counts = bitpaintingStorage.getEditionsCount(original);
            uint8[3] memory limits = bitpaintingStorage.getEditionLimits(original);
            current = counts[gen - 1];
            limit = limits[gen - 1];
        }
    }

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

}

    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":true,"inputs":[{"name":"_of","type":"address"}],"name":"pendingEditionsOf","outputs":[{"name":"tokens","type":"uint256[]"},{"name":"startedAt","type":"uint256[]"},{"name":"completedAt","type":"uint256[]"},{"name":"currentCounts","type":"uint8[]"},{"name":"limitCounts","type":"uint8[]"}],"payable":false,"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":"_tokenId","type":"uint256"}],"name":"createEdition","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_address","type":"address"}],"name":"setBitpaintingStorage","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[],"name":"withdraw","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[],"name":"unpause","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":"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":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":"_tokenId","type":"uint256"}],"name":"counter","outputs":[{"name":"current","type":"uint8"},{"name":"limit","type":"uint8"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"erc721Metadata","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_contractAddress","type":"address"}],"name":"setMetadataAddress","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"type":"function"},{"anonymous":false,"inputs":[{"indexed":false,"name":"creator","type":"address"},{"indexed":false,"name":"parentId","type":"uint256"},{"indexed":false,"name":"editionId","type":"uint256"},{"indexed":false,"name":"parentSpeed","type":"uint8"}],"name":"EditionCreated","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
60606040526000805460a060020a60ff02191690555b60008054600160a060020a03191633600160a060020a03161790555b5b61277f806100416000396000f3006060604052361561014e5763ffffffff60e060020a60003504166301ffc9a781146101535780630560ff441461019f57806306fdde0314610239578063095ea7b3146102c457806312610b5b146102e8578063179047431461047457806318160ddd146104a357806323b872dd146104c8578063290b3cb7146104f25780632f54bf6e14610525578063330cbc7514610558578063362f29c9146105705780633ccfd60b146105915780633f4ba83a146105a657806351ff4847146105bb5780635c975abb146105e05780636352211e1461060757806370a08231146106395780638456cb591461066a5780638462151c1461067f5780638da5cb5b146106f257806395d89b4114610721578063a9059cbb146107ac578063aad9973f146107d0578063b1f525c614610803578063bc4006f514610837578063e17b25af14610866578063f2fde38b14610887575b600080fd5b341561015e57600080fd5b61018b7fffffffff00000000000000000000000000000000000000000000000000000000600435166108a8565b604051901515815260200160405180910390f35b34156101aa57600080fd5b6101c1600480359060248035908101910135610b2f565b60405160208082528190810183818151815260200191508051906020019080838360005b838110156101fe5780820151818401525b6020016101e5565b50505050905090810190601f16801561022b5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561024457600080fd5b6101c1610c0e565b60405160208082528190810183818151815260200191508051906020019080838360005b838110156101fe5780820151818401525b6020016101e5565b50505050905090810190601f16801561022b5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34156102cf57600080fd5b6102e6600160a060020a0360043516602435610c45565b005b34156102f357600080fd5b610307600160a060020a0360043516610cd1565b60405180806020018060200180602001806020018060200186810386528b818151815260200191508051906020019060200280838360005b838110156103585780820151818401525b60200161033f565b5050505090500186810385528a818151815260200191508051906020019060200280838360005b838110156103985780820151818401525b60200161037f565b50505050905001868103845289818151815260200191508051906020019060200280838360005b838110156103d85780820151818401525b6020016103bf565b50505050905001868103835288818151815260200191508051906020019060200280838360005b838110156104185780820151818401525b6020016103ff565b50505050905001868103825287818151815260200191508051906020019060200280838360005b838110156104585780820151818401525b60200161043f565b505050509050019a505050505050505050505060405180910390f35b341561047f57600080fd5b610487611032565b604051600160a060020a03909116815260200160405180910390f35b34156104ae57600080fd5b6104b6611041565b60405190815260200160405180910390f35b34156104d357600080fd5b6102e6600160a060020a03600435811690602435166044356110ab565b005b34156104fd57600080fd5b61018b600160a060020a03600435166110d4565b604051901515815260200160405180910390f35b341561053057600080fd5b61018b600160a060020a03600435166111cd565b604051901515815260200160405180910390f35b341561056357600080fd5b6102e66004356111e4565b005b341561057b57600080fd5b6102e6600160a060020a03600435166116f0565b005b341561059c57600080fd5b6102e661174d565b005b34156105b157600080fd5b6102e66117a5565b005b34156105c657600080fd5b6104b6611865565b60405190815260200160405180910390f35b34156105eb57600080fd5b61018b61189f565b604051901515815260200160405180910390f35b341561061257600080fd5b6104876004356118af565b604051600160a060020a03909116815260200160405180910390f35b341561064457600080fd5b6104b6600160a060020a03600435166118c2565b60405190815260200160405180910390f35b341561067557600080fd5b6102e661193f565b005b341561068a57600080fd5b61069e600160a060020a03600435166119fe565b60405160208082528190810183818151815260200191508051906020019060200280838360005b838110156106de5780820151818401525b6020016106c5565b505050509050019250505060405180910390f35b34156106fd57600080fd5b610487611b3f565b604051600160a060020a03909116815260200160405180910390f35b341561072c57600080fd5b6101c1611b4e565b60405160208082528190810183818151815260200191508051906020019080838360005b838110156101fe5780820151818401525b6020016101e5565b50505050905090810190601f16801561022b5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34156107b757600080fd5b6102e6600160a060020a0360043516602435611b85565b005b34156107db57600080fd5b61018b600160a060020a0360043516611bf8565b604051901515815260200160405180910390f35b341561080e57600080fd5b610819600435611d6c565b60405160ff9283168152911660208201526040908101905180910390f35b341561084257600080fd5b610487611f9d565b604051600160a060020a03909116815260200160405180910390f35b341561087157600080fd5b6102e6600160a060020a0360043516611fac565b005b341561089257600080fd5b6102e6600160a060020a0360043516611ff4565b005b60006040517f737570706f727473496e7465726661636528627974657334290000000000000081526019016040518091039020600160e060020a03191682600160e060020a0319161480610b2757506040517f746f6b656e4d657461646174612875696e743235362c737472696e67290000008152601d0160405180910390206040517f746f6b656e734f664f776e657228616464726573732900000000000000000000815260160160405180910390206040517f7472616e7366657246726f6d28616464726573732c616464726573732c75696e81527f7432353629000000000000000000000000000000000000000000000000000000602082015260250160405180910390206040517f7472616e7366657228616464726573732c75696e743235362900000000000000815260190160405180910390206040517f617070726f766528616464726573732c75696e74323536290000000000000000815260180160405180910390206040517f6f776e65724f662875696e743235362900000000000000000000000000000000815260100160405180910390206040517f62616c616e63654f662861646472657373290000000000000000000000000000815260120160405180910390206040517f746f74616c537570706c792829000000000000000000000000000000000000008152600d0160405180910390206040517f73796d626f6c2829000000000000000000000000000000000000000000000000815260080160405180910390206040517f6e616d652829000000000000000000000000000000000000000000000000000081526006016040518091039020181818181818181818600160e060020a03191682600160e060020a031916145b90505b919050565b610b376126cc565b610b3f6126de565b600254600090600160a060020a03161515610b5957600080fd5b600254600160a060020a031663cb4799f2878787600060405160a0015260405160e060020a63ffffffff861602815260048101848152604060248301908152604483018490529091606401848480828437820191505094505050505060a060405180830381600087803b1515610bce57600080fd5b6102c65a03f11515610bdf57600080fd5b50505060405180608001805160209091016040529092509050610c028282612051565b92505b50509392505050565b60408051908101604052600c81527f4269745061696e74696e67730000000000000000000000000000000000000000602082015281565b60005460a060020a900460ff1615610c5c57600080fd5b610c6633826120a6565b1515610c7157600080fd5b610c7b818361212b565b7f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925338383604051600160a060020a039384168152919092166020820152604080820192909252606001905180910390a15b5b5050565b610cd96126cc565b610ce16126cc565b610ce96126cc565b610cf16126cc565b610cf96126cc565b6000806000806000806000806000610d0f611041565b9850610d1a8f6118c2565b975087604051805910610d2a5750595b908082528060200260200182016040525b509d5087604051805910610d4c5750595b908082528060200260200182016040525b509c5087604051805910610d6e5750595b908082528060200260200182016040525b509b5087604051805910610d905750595b908082528060200260200182016040525b509a5087604051805910610db25750595b908082528060200260200182016040525b509950600095505b8886101561101f57600154600160a060020a031663a3e7061d8760006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b1515610e2457600080fd5b6102c65a03f11515610e3557600080fd5b5050506040518051955050841515610e4c57611014565b8e600160a060020a0316610e5f8661219b565b600160a060020a031614610e7257611014565b600154600160a060020a03166350df8f718660006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b1515610ec357600080fd5b6102c65a03f11515610ed457600080fd5b5050506040518051905015610ee857611014565b600154600160a060020a031663145f8ba286600060405160c0015260405160e060020a63ffffffff8416028152600481019190915260240160c060405180830381600087803b1515610f3957600080fd5b6102c65a03f11515610f4a57600080fd5b505050604051805190602001805190602001805190602001805190602001805190602001805150929850909650610f879350889250611d6c915050565b9092509050848e8881518110610f9957fe5b60209081029091010152838d8881518110610fb057fe5b60209081029091010152828c8881518110610fc757fe5b60209081029091010152818b8881518110610fde57fe5b60ff909216602092830290910190910152808a8881518110610ffc57fe5b60ff9092166020928302909101909101526001909601955b600190950194610dcb565b5b50505050505050505091939590929450565b600154600160a060020a031681565b600154600090600160a060020a031663197b945482604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561108b57600080fd5b6102c65a03f1151561109c57600080fd5b50505060405180519150505b90565b60005460a060020a900460ff16156110c257600080fd5b6110cd838383612210565b5b5b505050565b600154600090600160a060020a0316632f54bf6e83836040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561112f57600080fd5b6102c65a03f1151561114057600080fd5b5050506040518051905080610b275750600154600160a060020a03166324d7806c8360006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b15156111a957600080fd5b6102c65a03f115156111ba57600080fd5b505050604051805190505b90505b919050565b600054600160a060020a038281169116145b919050565b600080600080600080600060149054906101000a900460ff1615151561120957600080fd5b3395506112158761219b565b600160a060020a0387811691161461122c57600080fd5b600154600160a060020a03166350df8f718860006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b151561127d57600080fd5b6102c65a03f1151561128e57600080fd5b5050506040518051905015156112a357600080fd5b600154600160a060020a0316635f4eab658860006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b15156112f457600080fd5b6102c65a03f1151561130557600080fd5b505050604051805115905061131957600080fd5b600154600160a060020a031663108a101b8860006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b151561136a57600080fd5b6102c65a03f1151561137b57600080fd5b50505060405180519050151561139057600080fd5b600154600160a060020a03166337e246ad8860006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b15156113e157600080fd5b6102c65a03f115156113f257600080fd5b505050604051805115905061140657600080fd5b600154600160a060020a03166370d1383d8860405160e060020a63ffffffff84160281526004810191909152602401600060405180830381600087803b151561144e57600080fd5b6102c65a03f1151561145f57600080fd5b5050600154600160a060020a0316905063fafb76dd6000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156114ab57600080fd5b6102c65a03f115156114bc57600080fd5b5050506040518051600154909650600160a060020a03169050630af9d89c8860006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b151561151a57600080fd5b6102c65a03f1151561152b57600080fd5b50505060405180516001805491019550600a9450600160a060020a0316905063cd0fdc248860006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b151561158f57600080fd5b6102c65a03f115156115a057600080fd5b5050506040518051905091506115be86868987878742600101612299565b600154600160a060020a0316639e6afbda8860405160e060020a63ffffffff84160281526004810191909152602401600060405180830381600087803b151561160657600080fd5b6102c65a03f1151561161757600080fd5b5050600154600160a060020a03169050639ed573608860006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b151561166c57600080fd5b6102c65a03f1151561167d57600080fd5b5050506040518051905090507f3f97d0875a1b44e01bf3372d1da5a4087c4e97a5ad5f81a4e1c69768548c8a3a86888784604051600160a060020a039094168452602084019290925260408084019190915260ff90911660608301526080909101905180910390a15b5b50505050505050565b60005433600160a060020a0390811691161461170b57600080fd5b600160a060020a038116151561172057600080fd5b6001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0383161790555b5b50565b60005433600160a060020a0390811691161461176857600080fd5b600054600160a060020a039081169030163180156108fc0290604051600060405180830381858888f1935050505015156117a157600080fd5b5b5b565b60005433600160a060020a03908116911614806118355750600154600160a060020a031663ca4b208b6000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561180557600080fd5b6102c65a03f1151561181657600080fd5b50505060405180519050600160a060020a031633600160a060020a0316145b151561184057600080fd5b60005460a060020a900460ff16151561185857600080fd5b6117a161246e565b5b5b5b565b60006040517f65646974696f6e73000000000000000000000000000000000000000000000000815260080160405190819003902090505b90565b60005460a060020a900460ff1681565b6000610b278261219b565b90505b919050565b600154600090600160a060020a031663b4f6eae483836040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b15156111a957600080fd5b6102c65a03f115156111ba57600080fd5b50505060405180519150505b919050565b60005433600160a060020a03908116911614806119cf5750600154600160a060020a031663ca4b208b6000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561199f57600080fd5b6102c65a03f115156119b057600080fd5b50505060405180519050600160a060020a031633600160a060020a0316145b15156119da57600080fd5b60005460a060020a900460ff16156119f157600080fd5b6117a16124d4565b5b5b5b565b611a066126cc565b6000611a106126cc565b6000806000611a1e876118c2565b9450841515611a4f576000604051805910611a365750595b908082528060200260200182016040525b509550611b35565b84604051805910611a5d5750595b908082528060200260200182016040525b509350611a79611041565b925060009150600190505b828111611b3157600154600160a060020a038089169116630d66343c8360006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b1515611ae057600080fd5b6102c65a03f11515611af157600080fd5b50505060405180519050600160a060020a03161415611b285780848381518110611b1757fe5b602090810290910101526001909101905b5b600101611a84565b8395505b5050505050919050565b600054600160a060020a031681565b60408051908101604052600281527f4250000000000000000000000000000000000000000000000000000000000000602082015281565b60005460a060020a900460ff1615611b9c57600080fd5b600160a060020a0382161515611bb157600080fd5b30600160a060020a031682600160a060020a031614151515611bd257600080fd5b611bdc33826120a6565b1515611be757600080fd5b610ccc33838361253f565b5b5b5050565b600154600090600160a060020a0316632f54bf6e83836040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b1515611c5357600080fd5b6102c65a03f11515611c6457600080fd5b5050506040518051905080611ce95750600154600160a060020a03166324d7806c8360006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b1515611ccd57600080fd5b6102c65a03f11515611cde57600080fd5b505050604051805190505b80610b275750600154600160a060020a031663babcc5398360006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b15156111a957600080fd5b6102c65a03f115156111ba57600080fd5b505050604051805190505b90505b919050565b600080600080611d7a61272b565b611d8261272b565b600154600160a060020a0316630af9d89c8860006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b1515611dd357600080fd5b6102c65a03f11515611de457600080fd5b505050604051805194505060ff84161515611e06576001955060019450611f93565b600154600160a060020a031663a42455278860006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b1515611e5757600080fd5b6102c65a03f11515611e6857600080fd5b5050506040518051600154909450600160a060020a03169050635de815348460006040516060015260405160e060020a63ffffffff84160281526004810191909152602401606060405180830381600087803b1515611ec657600080fd5b6102c65a03f11515611ed757600080fd5b505050604051606081016040908152600154919350600160a060020a039091169063f79098f4908590600090516060015260405160e060020a63ffffffff84160281526004810191909152602401606060405180830381600087803b1515611f3e57600080fd5b6102c65a03f11515611f4f57600080fd5b5050506040516060810160405290508160ff60001986011660038110611f7157fe5b602002015195508060ff60001986011660038110611f8b57fe5b602002015194505b5b50505050915091565b600254600160a060020a031681565b60005433600160a060020a03908116911614611fc757600080fd5b6002805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0383161790555b5b50565b60005433600160a060020a0390811691161461200f57600080fd5b600160a060020a038116151561202457600080fd5b6000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0383161790555b5b50565b6120596126cc565b6120616126cc565b600080846040518059106120725750595b908082528060200260200182016040525b5092505060208201905084612099828287612600565b8293505b50505092915050565b600154600090600160a060020a038085169116630d66343c84846040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b15156120fd57600080fd5b6102c65a03f1151561210e57600080fd5b50505060405180519050600160a060020a03161490505b92915050565b600154600160a060020a031663febe4909838360405160e060020a63ffffffff85160281526004810192909252600160a060020a03166024820152604401600060405180830381600087803b151561218257600080fd5b6102c65a03f1151561219357600080fd5b5050505b5050565b600154600090600160a060020a0316630d66343c83836040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b15156111a957600080fd5b6102c65a03f115156111ba57600080fd5b50505060405180519150505b919050565b60005460a060020a900460ff161561222757600080fd5b600160a060020a038216151561223c57600080fd5b30600160a060020a031682600160a060020a03161415151561225d57600080fd5b6122673382612647565b151561227257600080fd5b61227c83826120a6565b151561228757600080fd5b6110cd83838361253f565b5b5b505050565b60008063ffffffff881688146122ae57600080fd5b63ffffffff871687146122c057600080fd5b5b600154600160a060020a0316638754b1d18a8a8a8a8a8a8a60405160e060020a63ffffffff8a16028152600160a060020a0390971660048801526024870195909552604486019390935260ff918216606486015216608484015260a483015260c482015260e401600060405180830381600087803b151561234157600080fd5b6102c65a03f1151561235257600080fd5b5050600154600160a060020a0316905063145f8ba289600060405160c0015260405160e060020a63ffffffff8416028152600481019190915260240160c060405180830381600087803b15156123a757600080fd5b6102c65a03f115156123b857600080fd5b5050506040518051906020018051906020018051906020018051906020018051906020018051509296509094507f30327159df74d598a666b3800d1708fc84a7a52e5f6fb58cdd4bdffe7ad653c793508b92508c91508a9050898686604051958652600160a060020a03909416602086015260408086019390935260ff9091166060850152608084015260a083019190915260c0909101905180910390a161246260008a8a61253f565b5b505050505050505050565b60005460a060020a900460ff16151561248657600080fd5b6000805474ff0000000000000000000000000000000000000000191690557f7805862f689e2f13df9f062ff482ad3ad112aca9e0847911ed832e158c525b3360405160405180910390a15b5b565b60005460a060020a900460ff16156124eb57600080fd5b6000805474ff0000000000000000000000000000000000000000191660a060020a1790557f6985a02210a168e66602d3235cb6db0e70f92b3ba4d376a33c0f3d9434bff62560405160405180910390a15b5b565b600154600160a060020a031663687c4fa7828460405160e060020a63ffffffff85160281526004810192909252600160a060020a03166024820152604401600060405180830381600087803b151561259657600080fd5b6102c65a03f115156125a757600080fd5b5050507fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef838383604051600160a060020a039384168152919092166020820152604080820192909252606001905180910390a15b505050565b60005b6020821061262757825184526020840193506020830192505b602082039150612603565b6001826020036101000a0390508019835116818551161784525b50505050565b600154600090600160a060020a031663b5b12e758385846040516020015260405160e060020a63ffffffff85160281526004810192909252600160a060020a03166024820152604401602060405180830381600087803b15156126a957600080fd5b6102c65a03f115156126ba57600080fd5b50505060405180519150505b92915050565b60206040519081016040526000815290565b60806040519081016040526004815b600081526000199190910190602001816126ed5790505090565b60206040519081016040526000815290565b60206040519081016040526000815290565b60606040519081016040526003815b60008152600019909101906020018161273a57905050905600a165627a7a723058203c0f4c698e6608d3635ce57694e7a7ae372a866e9f03f5aceb427912aae948af0029

   Swarm Source:
bzzr://3c0f4c698e6608d3635ce57694e7a7ae372a866e9f03f5aceb427912aae948af

 

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.